用Zig辅助RUST进行跨平台交叉编译

用Zig辅助RUST进行跨平台交叉编译用Zig辅助RUST进行跨平台交叉编译

缘起

利用rust写的项目需要在mips64el环境下运行,并且该环境的glibc版本非常低,调研了各种方法后发现用Zig最为方便。

rust可以通过cargo-zigbuild工具利用zig的工具链方便的跨平台交叉编译,并且支持指定glibc版本。本文简单介绍使用方法。下面描述将环境分为构建机和运行机,构建机为构建打包的机器环境,运行机为程序的最终运行环境。

 

构建机环境准备

1.安装Rust开发环境

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

参考:https://www.rust-lang.org/tools/install

2.安装Zig环境

以mac为例:

1
brew install zig

其它系统参考:https://ziglang.org/download/

3.安装cargo-zigbuild

1
cargo install cargo-zigbuild

打包命令参考

1.获取运行机环境glibc版本

1
ldd --version

2.构建机打包

简单分为两种情况,一种是Rust官方有现成的std包,例如aarch64-linux。一种是Rust官方没有现成的std包,例如mips64el-linux,下面分别介绍这两种情况的例子

  • 如果打包aarch64-linux
1
2
3
4
# 下载官方的std包
rustup target add aarch64-unknown-linux-gnu
# 打包,下面的aarch64-unknown-linux-gnu.2.25最后的2.25指定的是glibc版本号
cargo zigbuild --target aarch64-unknown-linux-gnu.2.25 --release
  • 如果打包mips64el-linux
1
2
3
4
5
6
7
# 标准库源码安装
rustup component add rust-src --toolchain nightly
## 对于mac-arm,标准库源码安装是
rustup component add rust-src --toolchain nightly-aarch64-apple-darwin

# 编译打包,下面的mips64el-unknown-linux-gnuabi64.2.25 最后的2.25指定的是glibc版本号
cargo +nightly zigbuild --target mips64el-unknown-linux-gnuabi64.2.25 --release -Z build-std=core,alloc,std,proc_macro