Я давно разрабатывал приложение 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
?Может быть, это может дать некоторые подсказки.