下面给你一份在 Debian 上做 Rust 交叉编译的实用指南,从「最常见情况」到「进阶场景」都覆盖。
先确定你要编译到什么平台,例如:
| 目标 | target triple |
|---|---|
| x86_64 Linux | x86_64-unknown-linux-gnu |
| ARM32 Linux | armv7-unknown-linux-gnueabihf |
| AArch64 Linux | aarch64-unknown-linux-gnu |
| Windows (MSVC) | x86_64-pc-windows-msvc |
| Windows (GNU) | x86_64-pc-windows-gnu |
| macOS | ❌(Linux 上不能直接交叉编译 macOS,需特殊工具) |
可用命令查看支持的目标:
rustup target list
rustup target add aarch64-unknown-linux-gnu
之后即可:
cargo build --target aarch64-unknown-linux-gnu
⚠️ 但仅这样通常还不够,还缺交叉链接器。
sudo apt update
sudo apt install gcc-aarch64-linux-gnu
| 目标 | 包名 |
|---|---|
| aarch64 | gcc-aarch64-linux-gnu |
| armhf | gcc-arm-linux-gnueabihf |
| x86_64 win | gcc-mingw-w64-x86-64 |
.cargo/config.toml(推荐)[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
多个目标示例:
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
[target.x86_64-pc-windows-gnu]
linker = "x86_64-w64-mingw32-gcc"
cargo build --target aarch64-unknown-linux-gnu
file target/aarch64-unknown-linux-gnu/debug/xxx
✅ 直接交叉编译没问题
cross(强烈推荐)cargo install cross
cross build --target aarch64-unknown-linux-gnu
✅ 自动解决:
[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
并设置:
export ARMV7_SYSROOT=/usr/aarch64-linux-gnu
rustup target add aarch64-unknown-linux-musl
sudo apt install musl-tools
cargo build --target aarch64-unknown-linux-musl
✅ 生成完全静态二进制
| 错误 | 原因 |
|---|---|
linker not found |
没装交叉 gcc |
cannot find -lssl |
系统库没交叉编译 |
undefined reference |
C ABI 不匹配 |
error: failed to run custom build |
C 依赖问题 |
✅ Debian + Rust + cross
cargo install cross
cross build --target aarch64-unknown-linux-gnu
如果你能告诉我:
我可以直接给你一套可用配置。