针对armv7-unknown-linux-gnueabi目标的Rust程序构建链接错误求助
解决Rust交叉编译到armv7-unknown-linux-gnueabi的链接错误
问题场景
有一个简单的Rust程序:
// main.rs fn main() { println!("Hello World!"); }
执行交叉编译命令时:
rustc --target armv7-unknown-linux-gnueabi main.rs
出现链接错误,核心提示:
/usr/bin/ld: main.main.bb83c76b-cgu.0.rcgu.o: Relocations in generic ELF (EM: 40) main.main.bb83c76b-cgu.0.rcgu.o: error adding symbols: File in wrong format
本质是系统默认的cc/ld是x86架构的工具链,无法处理ARM架构的目标文件,导致链接失败。
解决步骤
1. 安装ARM交叉编译工具链
根据你的Linux发行版安装对应工具链:
- Debian/Ubuntu系列:
sudo apt install gcc-arm-linux-gnueabi - Fedora/RHEL系列:
sudo dnf install arm-linux-gnueabi-gcc
2. 配置Rust使用交叉编译链接器
有两种配置方式:
方式一:临时通过环境变量指定
编译时直接设置CC环境变量为ARM交叉编译器:
CC=arm-linux-gnueabi-gcc rustc --target armv7-unknown-linux-gnueabi main.rs
方式二:永久配置Cargo(推荐)
编辑~/.cargo/config.toml文件(不存在则创建),添加以下内容:
[target.armv7-unknown-linux-gnueabi] linker = "arm-linux-gnueabi-gcc"
之后再执行原编译命令,会自动使用指定的ARM链接器:
rustc --target armv7-unknown-linux-gnueabi main.rs
验证
编译完成后,用file命令检查生成的可执行文件架构:
file main
输出包含ARM字样即说明编译成功。
内容的提问来源于stack exchange,提问作者cnm
相关产品推荐
相关产品推荐

