从x86_64-RedHat Linux交叉编译Rust到aarch64-linux-gnu失败求助
解决树莓派4(64位Raspberry Pi OS)交叉编译Rust二进制程序的链接错误问题
问题本质
你的问题出在交叉编译时,Rust目标工具链未正确关联交叉编译C工具链及其系统库路径:要么默认用了本地cc(与目标架构不匹配),要么指定交叉编译器后找不到对应的启动文件和系统库。
解决步骤
1. 配置Rust目标工具链关联交叉编译器
在项目根目录创建或编辑config.toml(若要全局生效,可编辑~/.cargo/config.toml),添加以下内容:
[target.aarch64-unknown-linux-gnu] linker = "aarch64-linux-gnu-gcc" rustflags = [ "-C", "link-arg=-L/usr/aarch64-linux-gnu/lib", "-C", "link-arg=-L/usr/lib/gcc/aarch64-linux-gnu/$(ls /usr/lib/gcc/aarch64-linux-gnu/ | sort -V | tail -n1)/", ]
注:上述命令中的
$(ls ...)会自动获取最新的gcc版本号,也可以手动替换为实际版本,比如12。
2. 安装目标架构的系统依赖库
仅安装交叉编译器不够,还需补充目标架构的标准库:
sudo dnf install glibc-devel.aarch64-linux-gnu libgcc.aarch64-linux-gnu
3. 执行编译
重新运行编译命令:
cargo build --target aarch64-unknown-linux-gnu
额外排查项
- 验证交叉编译器可用性:执行
aarch64-linux-gnu-gcc -v,确认输出包含aarch64架构信息,且系统库路径正常。 - 更新Rust工具链:执行
rustup update,确保工具链为最新版本后重试。
内容的提问来源于stack exchange,提问作者mariano-f-r
相关产品推荐
相关产品推荐

