Rust APK启动崩溃:无法定位符号_Unwind_Resume,求排查方案
解决Rust Android应用崩溃:无法定位
_Unwind_Resume符号的问题 问题现象
部署Rust OpenXR应用(或官方示例项目)到Quest 2时,应用启动即崩溃,Logcat报错核心内容为:
dlopen failed: cannot locate symbol "_Unwind_Resume" referenced by "...libxxx.so"
问题原因
Android NDK 25及以上版本移除了对libunwind的默认静态链接,而Rust编译生成的二进制文件默认依赖_Unwind_Resume符号,导致动态加载时无法找到该符号。
解决方案
方案1:降级NDK版本
将NDK版本降级到24.x或更早版本(这些版本仍包含libunwind的必要符号):
- 打开Android Studio的SDK Manager,下载NDK 24.x系列版本(如24.0.8215888)
- 修改环境变量
ANDROID_NDK_ROOT指向新的NDK路径:export ANDROID_NDK_ROOT=~/Android/Sdk/ndk/24.0.8215888/
方案2:配置Rust链接器参数
若不想降级NDK,可在项目的.cargo/config.toml中添加链接器选项,强制链接libunwind:
[target.aarch64-linux-android] rustflags = [ "-C", "link-arg=-lunwind", ]
如果需要适配所有Android架构,可改为:
[target.'cfg(target_os = "android")'] rustflags = [ "-C", "link-arg=-lunwind", ]
方案3:更新cargo-apk工具
确保使用最新版本的cargo-apk,避免工具链兼容性问题:
cargo install cargo-apk --force
验证
修改完成后,重新执行cargo apk run部署应用,检查是否能正常启动。
内容的提问来源于stack exchange,提问作者Mutant Bob
相关产品推荐
相关产品推荐

