rust交叉编译配置:windows上编译linux可执行程序
简述
交叉编译大概指在在一种计算机环境中运行的编译程序,能编译出在另外一种环境下运行的代码.
本次,我们配置的是在windows上编译出在linux上运行的rust可执行程序.
我们在安装rust之后,默认会安装跟机器环境搭配的编译相关工具.而其他平台的编译工具就需要我们自己去安装了.
通过如下命令查看rust当前的编译工具:
rustup show
查看rust其他支持的编译工具链工具:
rustup target list
# 其中标注了(installed)的表示已安装
其中以gnu为后缀的表示动态编译,即很多包依赖与系统原有的,不打如包中,这可能造成把程序放在某些机器上执行错误的情况,
好处是编译后体积较小.
而以msvc或者musl为后缀的,表示静态编译,即把这个程序相关的代码都打进去,只要执行环境(即编译工具前面的描述x86_64_windows什么的一致)就能执行,
缺点是编译后体积较大.
尝试常规方法配置windows上编译linux的环境遇到各种环境失败之后,决定采用cross方案.
cross介绍
cross仓库地址 : https://github.com/cross-rs/cross
cross大概步骤就是通过docker起一个你编译目标的环境,然后把代码扔过去编译,完成后把结果放到项目的target目录下.
这种方式,一劳永逸,并且可拓展性很强,不会遇到各种问题.因此决定采用cross.
cross项目地址上也有教程,请留心查看.
其中,cross的使用跟cargo命令相似:
$ cross build --target aarch64-unknown-linux-gnu
$ cross test --target mips64-unknown-linux-gnuabi64
$ cross rustc --target powerpc-unknown-linux-gnu --release -- -C lto
使用步骤
1. 在cargo上安装cross工具
cargo install cross --git https://github.com/cross-rs/cross
2. 安装docker
此处不详细介绍,注意windows和linux安装docker步骤不一样,windows上需要开启某项系统功能.
具体见: https://www.runoob.com/docker/windows-docker-install.html
注意,需要将docker配置为国内镜像源,但是国内镜像有的已经不能使用了,
我目前的配置如下:
"registry-mirrors": [
"https://5ba5frns.mirror.aliyuncs.com",
"https://mirror.baidubce.com"
]
3. 拉取相关镜像
如果直接就开始使用,默认拉取的是github仓库的镜像,国内环境网速不行,且没有相关国内镜像源,试了若干次,都以卡死告终.
幸好,有人已经拉取成功并上传到其他仓库中,这些仓库包含在我们配置的国内仓库中,因此可以顺利拉取.
使用以下命令拉取:
docker pull japaric/x86_64-unknown-linux-musl
4. 项目中配置cross,指定image
因为我们使用的不是默认的image,所以要在项目中配置说明,在项目Cargo.toml中添加如下:
[package.metadata.cross.target.x86_64-unknown-linux-musl]
image = "japaric/x86_64-unknown-linux-musl"
4. 开始编译
此处就可以开始使用corss编译了,我们的镜像是 x86_64-unknown-linux-musl,
注意指定target,那么在项目中执行如下命令即可:
cross build --release --target x86_64-unknown-linux-musl
标签:windows,unknown,cross,编译,linux,--,可执行程序
From: https://www.cnblogs.com/sqhhh/p/17352177.html