You need to enable JavaScript to run this app. Rust交叉编译到Android时出现ld: error: unable to find library -lgcc怎么解决
优惠活动
大模型
产品
解决方案
定价
更多

Rust交叉编译到Android时出现ld: error: unable to find library -lgcc怎么解决

问题根因

你使用的NDK 23及以上版本移除了libgcc,改用libunwind作为替代,而Rust默认的Android交叉编译配置仍会向链接器传递-lgcc参数,导致链接失败。只有编译为rlib时不需要执行最终的动态库链接步骤,所以不会触发该错误。

解决方案

方法1:添加链接参数替换libgcc(适配NDK r23+,无需额外工具)

在你的.cargo/config(或项目根目录的.cargo/config.toml)中,针对Android目标添加链接标记,把-lgcc替换为-lunwind -ldl,示例配置如下:

[target.arm-linux-androideabi]
linker = "/opt/android-sdk/ndk/23.0.7599858/toolchains/llvm/prebuilt/linux-x86_64/bin/armv7a-linux-androideabi31-clang"
rustflags = [
  "-C", "link-arg=-lgcc",
  "-C", "link-arg=-lunwind",
  "-C", "link-arg=-ldl",
]

如果需要同时编译其他Android架构(如aarch64-linux-android、i686-linux-android、x86_64-linux-android),每个目标都要添加对应rustflags配置。

方法2:降级NDK版本

如果不想修改编译配置,可以将NDK版本切换到22.x及更低版本,这些版本仍保留libgcc,无需额外修改配置即可正常编译出cdylib格式的.so文件。

方法3:使用cargo-ndk工具自动适配

社区封装的cargo-ndk工具会自动适配不同NDK版本的链接参数,无需手动处理配置:

  1. 安装工具:cargo install cargo-ndk
  2. 执行编译命令:
ANDROID_NDK_HOME=/opt/android-sdk/ndk/23.0.7599858 cargo ndk --target armv7-linux-androideabi --platform 31 build --release

编译完成后的.so文件会存放在对应target目录的release文件夹中。

内容的提问来源于stack exchange,提问作者StackOverflower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 18:36:03