使用Rust编译Android终端Hello World时cc链接失败求助
解决Rust编译Android目标链接失败的问题
问题根源分析
- 目标架构不匹配:执行
cargo build --target arm-linux-androideabi,但错误日志显示实际编译目标为aarch64-linux-android(64位ARM),存在架构冲突。 - CC/CXX环境变量配置错误:将生成工具链的脚本
make_standalone_toolchain.py直接设为编译器,这不是正确的编译器路径。 - Cargo配置错误:Cargo.toml中的链接器配置无效且路径不正确,未指定NDK提供的交叉编译器。
修复步骤
1. 修正环境变量配置(~/.bashrc)
删除错误的CC/CXX配置,先生成适配arm架构的独立工具链(仅需执行一次),再将工具链路径加入环境变量:
export PATH=$PATH:/home/alberto/.platformio/penv/bin export NDK_PATH=~/Android/Sdk/ndk/26.1.10909125 # 生成arm-linux-androideabi工具链,指定API级别(如21,适配大多数Android设备) $NDK_PATH/build/tools/make_standalone_toolchain.py --arch arm --api 21 --install-dir ~/android-toolchain-arm # 将工具链加入PATH export PATH=$PATH:~/android-toolchain-arm/bin . "$HOME/.cargo/env"
执行source ~/.bashrc使配置生效。
2. 创建正确的Cargo配置文件
在项目根目录创建.cargo/config.toml,替代Cargo.toml中的无效配置:
[target.arm-linux-androideabi] linker = "arm-linux-androideabi-clang" rustflags = [ "-C", "link-arg=-fuse-ld=lld", ]
3. 修正Cargo.toml配置
移除无效的[build]和[target.'cfg(target_os = "android")']字段,保留基础配置:
[package] name = "prueba_android" version = "0.1.0" edition = "2021" # 仅当确实需要openssl时保留,否则可删除 [target.arm-linux-androideabi.dependencies] openssl = { version = "*", features = ["vendored"] }
4. 重新编译
清理旧的编译产物,重新指定目标编译:
cargo clean cargo build --target arm-linux-androideabi
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

