android - 库突然不会在动态链接器(NDK)中加载

标签 android c++ gcc g++ android-ndk

我开发 NDK 应用已经有一段时间了,而且运行良好。然而,今天这个应用程序随机决定不再启动,在我做了一些名义上的更改后编译它之后。这是由加载应用程序的主库时出现的神秘问题引起的。这是一些日志输出:

08-11 18:38:11.220 D/dalvikvm( 1237): Added shared lib /mnt/asec/com.audia.rta-1/lib/libqtandroid.so 0x40513bd8
08-11 18:38:11.220 D/dalvikvm( 1237): No JNI_OnLoad found in /mnt/asec/com.audia.rta-1/lib/libqtandroid.so 0x40513bd8, skipping init
08-11 18:38:11.220 D/dalvikvm( 1237): Trying to load lib /mnt/asec/com.audia.rta-1/lib/librta.so 0x40513bd8
08-11 18:38:11.260 D/AndroidRuntime( 1237): Shutting down VM
08-11 18:38:11.260 W/dalvikvm( 1237): threadid=1: thread exiting with uncaught exception (group=0x40015560)
08-11 18:38:11.260 E/AndroidRuntime( 1237): FATAL EXCEPTION: main
08-11 18:38:11.260 E/AndroidRuntime( 1237): java.lang.UnsatisfiedLinkError: Cannot load library: reloc_library[1311]:    67 cannot locate '_ZNSaIcEC1Ev'...
08-11 18:38:11.260 E/AndroidRuntime( 1237): 
08-11 18:38:11.260 E/AndroidRuntime( 1237):     at java.lang.Runtime.loadLibrary(Runtime.java:434)
08-11 18:38:11.260 E/AndroidRuntime( 1237):     at java.lang.System.loadLibrary(System.java:554)
08-11 18:38:11.260 E/AndroidRuntime( 1237):     at com.audia.rta.RTA.onCreate(RTA.java:139)

根据 Google 的一些结果,_ZNSaIcEC1Evlibstdc++ 的一部分。我已经检查过,它在构建过程中被链接,g++ 被用于链接。

奇怪的是,恢复到应用程序的旧 apk 可以解决问题,但是编译旧版本并安装它不能解决问题。我的构建系统中的所有内容都已 checkin 版本控制,并且我已经完成了几个干净的构建。我所有的构建今天都在工作,然后他们就停止工作了。我没有升级或安装任何东西;它发生在我正在测试新代码的过程中。发生了什么事?

更新:从新 checkout 的拷贝构建并不能解决问题。

更新 2: 有什么方法可以追踪到该符号的链接,也许可以使用 objdump?也许这可以提供一些线索。

最佳答案

我最终使用全新的 NDK 安装编译了所有内容,并且成功了。就好像旧的以某种方式被损坏了,虽然我不知道是如何损坏的。

也是从r5b升级到r6,所以可能和NDK版本有关。

关于android - 库突然不会在动态链接器(NDK)中加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7034299/

相关文章:

-std=c99 可以阻止我的#includes 正常工作吗?

java - Android studio 弹出图像按钮

Android - 自定义键盘键和 Action

android 奇怪的 float 数学

c++ - 一群士兵一起在网格 map 上移动

c++ - 在 OpenGL 中绘制形状的标准(常见)方法是什么?

android - 减少视频缓冲

c++ - 打印宏连接失败

C++ 运算符重载 - 从类中转换

c++ - 在 amd64 Debian 上编译 i386 二进制文件?