我已经开发了一个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搜索结果,_ZNSaIcEC1Ev
是libstdc++
的一部分。我已经检查过,它在构建过程中被链接,g++
被用于链接。
奇怪的是,恢复到应用程序的较旧apk修复了问题,但编译旧版本并安装不能解决问题。我的构建系统中的所有内容都被检入版本控制,我已经完成了几个干净的构建。我的所有版本都在今天工作,然后他们就停止了工作。我没有升级或安装任何东西;它发生在我正在测试新代码的过程中。发生了什么事?
更新:从新签出的副本构建无法解决问题。
更新2 :我有没有办法追踪到该符号的链接,可能是objdump
?也许这可以提供一些线索。
答案 0 :(得分:0)
我最终使用全新的NDK安装编译所有内容,并且它有效。就好像旧的一个被腐蚀了,虽然我不知道怎么做。
这也是从r5b
升级到r6
,所以也许它与NDK版本有关。