首页 > 其他分享 >rust环境搭建&docker安装&rust工程编译

rust环境搭建&docker安装&rust工程编译

时间:2023-03-01 09:47:58浏览次数:34  
标签:sudo 编译 https docker 安装 rust

目录
1. rust编译环境的安装

2. 交叉编译的设置

3. cross工具的安装

4. docker的安装

5. Cargo.toml文件的修改

6. 编译

 

前言(可跳过)
某rust项目仓库,预编译的可执行文件未加入某一特性(在仓库主页有说明该可选项),现欲加入该特性。注意目标平台为arm64(aarch64)且希望musl静态链接。

在成功之前,经历过几次失败,主要是平台不同,但流程类似。

最开始直接在arm64平台上编译。若不设置交叉编译的target,则可以编译成功,但生成的是glibc动态链接。然后发现是需要指定目标(交叉编译),并需要先安装相应的工具

然而出现其中一个依赖包(ring)无法编译的问题。

error: failed to run custom build command for `ring v0.16.20`
然后尝试在alpine linux的docker中编译,原生的musl库无需设置交叉编译,但也报了相同的错误。互联网上的搜索结果大致指向编译环境的问题,最好的方法是docker或者指定的工具链,但是这些解决方案是基于x86平台的,我先前的尝试均在arm上进行

后来发现仓库中提供了一键build脚本,打算进行尝试,但是其因为使用了docker打包了编译环境且只能在x86平台上运行,故环境切换到x86上,下面简要介绍搭建环境过程

1. rust编译环境的安装
假定已有gcc、wegt等工具

设置镜像以加速

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
export RUSTUP_UPDATE_ROOT=https://mirrors.ustc.edu.cn/rust-static/rustup

然后获取安装脚本并执行

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

执行时会询问你安装方式,一般一路默认即可

安装完成后,根据提示source环境变量:

source "$HOME/.cargo/env"

可以通过查看版本的方式确认rust编译器是否安装成功

rustc -V

2. 交叉编译的设置(根据实际情况选装)
这一步实际上可以略去,因采用脚本编译,届时依赖会带上。

分为rust支持包和本机gcc工具链侧两部分:

rustup target add aarch64-unknown-linux-musl
sudo apt install musl-gcc

3. cross工具的安装(根据实际情况选装
一键build脚本里面需要用到一个rust工具cross,需要先安装

cargo install  cross 

4. docker的安装(根据实际情况选装)
因本仓库编译脚本需要使用docker,故先给系统安装docker,不是所有场景都需要。此部分资料很多,但还是在此做个记录

mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt update

sudo apt install docker-ce

 

然后设置国内镜像以加速拉镜像,编辑/etc/docker/daemon.json:

{
  "registry-mirrors": ["http://hub-mirror.c.163.com"],
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

给docker添加权限,使其可以不用sudo进行操作

sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo service docker restart
sudo chmod a+rw /var/run/docker.sock

5. Cargo.toml文件的修改
前面提到,本次编译是为了开启选项。这些选项在toml文件的[features]一栏中指定,可以进行增删:

[features]
default = [
    "option1",
    "option2",
    "optionx",
] 

6. 编译
因为是交叉编译,故编译的时候要带上目标平台的参数。若手动build,需要指定target,如

cargo build --target aarch64-unknown-linux-musl

此构建脚本也是需要传递类似参数进去

./build/build-release -t aarch64-unknown-linux-musl

 

转自https://www.bilibili.com/read/cv20572204

 

标签:sudo,编译,https,docker,安装,rust
From: https://www.cnblogs.com/xiaoBastard/p/17166872.html

相关文章