根据你的目标平台自己装一个就好。
1.1 Mac: 通过 brew 安装 musl-cross 工具 来专门编译到 linux 的工具链。
$ brew install FiloSottile/musl-cross/musl-cross
$ brew install mingw-w64
1.2 Windows:通过安装 mingw-w64 来专门编译到 linux 的工具链。
rustup target add x86_64-unknown-linux-musl
2.我装的是 musl-cross,装好后到 ~/.cargo/config 文件中添加上:
[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
常见问题
要是提示/bin/sh: musl-gcc: command not found,解决方法是安装musl-cross
brew install filosottile/musl-cross/musl-cross
rustup 是 Rust 的包管理工具,用它来配置工具链可以很省心。
运行 rustup target list
你可以看到很多的目标平台。
$ rustup target list
aarch64-apple-ios
aarch64-linux-android
aarch64-unknown-fuchsia
aarch64-unknown-linux-gnu
aarch64-unknown-linux-musl
arm-linux-androideabi
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf
arm-unknown-linux-musleabi
arm-unknown-linux-musleabihf
armv5te-unknown-linux-gnueabi
armv5te-unknown-linux-musleabi
armv7-apple-ios
armv7-linux-androideabi
armv7-unknown-linux-gnueabihf
armv7-unknown-linux-musleabihf
armv7s-apple-ios
asmjs-unknown-emscripten
i386-apple-ios
... ...
我们之前只设置了 target.x86_64-unknown-linux-musl
,所以现在也只装对应的这个目标平台相关工具:
$ rustup target add x86_64-unknown-linux-musl
这一步如果很慢可以在你的 .bashrc 或者 .zshrc 中添加这一行,中科大的源加速很靠谱:
export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
接着只要在运行 build 命令时指定 target 就可以了。
$ cargo build --target=x86_64-unknown-linux-musl
接着你可以看到类似这样的文件结构:
├── build
└── target
└── x86_64-unknown-linux-musl
└── debug
├── build
├── deps
├── examples
├── incremental
└── native
找到你对应编译好的可执行文件,扔到你的 linux 机子上跑,就可以了。
你可以用 file 命令确认一下:
$ file target/x86_64-unknown-linux-musl/debug/rust-test
target/x86_64-unknown-linux-musl/debug/rust-test: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, with debug_info, not stripped
1在编译Rust源程序时,可能会出现如下 Couldn’t resolve host name (Could not resolve host: crates) 错误(见 https://github.com/ustclug/discussions/issues/294)。
一个临时的解决方法是在运行 cargo 的时候加入环境变量
CARGO_HTTP_MULTIPLEXING=false
。作用是取消并行下载。具体原因可参考用了镜像之后构建rustc报错。