私はNDKアプリケーションをかなりの期間開発しており、うまくいきました。しかし、今日のアプリは、名目上の変更を加えてコンパイルした後、もはやランダムには起動しないことに決めました。これは、アプリのメインライブラリを読み込む際の謎の問題が原因です。ここではいくつかのログ出力です:いくつかのGoogleの検索結果によるとlibsがダイナミックリンカー(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)
、_ZNSaIcEC1Ev
はlibstdc++
の一部です。私はチェックして、ビルドプロセスでリンクされ、g++
がリンクに使用されています。
奇妙なことに、アプリの古いapkに戻っても、をコンパイルしてインストールしても問題は解決されません。ビルドシステムのすべてがバージョンコントロールにチェックインされ、いくつかのクリーンビルドが行われました。私のビルドはすべて今日働いていて、その後は仕事が止まった。私は何もアップグレードもインストールもしなかった。私が新しいコードをテストしている間に起こったことです。何が起こった?
更新:新しくチェックアウトされたコピーからのビルドは問題を解決しません。
更新2:objdump
とそのシンボルへのリンクを追跡する方法はありますか?多分、これはいくつかの手掛かりを提供する可能性があります。