使用 rustup 查看 支持的target 平台
rustup target list
# add target
rustup target add x86_64-unknown-linux-musl
osx
执行编译
cargo build --target x86_64-unknown-linux-musl
目标是创建 平台的应用程序,通过静态连接musl, 不再依赖glibc库。 但在 osx 下执行会报错。缺少 musl-gcc
Internal error occurred: Failed to find tool. Is
musl-gcc
installed?
安装链接器 musl-cross, 其中 musl-cross 是用来专门编译到 linux 的工具链,而 mingw-w64 是用来编译到 windows 的工具链.
brew install FiloSottile/musl-cross/musl-cross
# 创建
ln -s /usr/local/bin/x86_64-linux-musl-gcc /usr/local/bin/musl-gcc
为项目追加 .cargo/config.toml
文件 ( 或者.cargo/config
) , 然后追加配置到 .cargo/config.toml
; 阅读cargo config文档
[build]
# 设定默认target
# target = "x86_64-unknown-linux-musl"
[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
rustflags = ["-C", "link-arg=-Wl,-undefined,dynamic_lookup"]
rustflags 给 rustc 的参数,也支持
[build]
节点。
执行
cargo build --target x86_64-unknown-linux-musl
# 或者
CROSS_COMPILE=x86_64-linux-musl-gcc cargo build --release --target x86_64-unknown-linux-musl
使用 rustc 来交叉编译
编译单个文件
rustc -- --target=x86_64-unknown-linux-musl -C linker=x86_64-linux-musl-gcc -C link-args='-Wl,-undefined,dynamic_lookup'
cargo rustc
编译项目, 编译的文件会直接为 debug 内,而非 相应target文件夹内。
cargo rustc -- --target=x86_64-unknown-linux-musl -C linker=x86_64-linux-musl-gcc -C link-args='-Wl,-undefined,dynamic_lookup'
linux
如果在linux下遇到 error: linking with cc failed: exit code: 1
, 工具链错误
- 安装
binutils
yum install binutils