libs вдруг не загрузится в динамический компоновщик (NDK) - PullRequest
1 голос
/ 12 августа 2011

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

1 Ответ

0 голосов
/ 13 августа 2011

Я закончил компилировать все с новой установкой NDK, и это сработало.Как будто старый был как-то поврежден, хотя я понятия не имею, как.

Это было также обновление с r5b до r6, поэтому, возможно, это связано с версией NDK.

...