невозможно загрузить библиотеку во время выполнения в приложении для Android - PullRequest
4 голосов
/ 13 мая 2010

Я работаю над приложением для Android, в котором я использовал JNI для нативного кода C. Я строю это приложение на Android версии 2.0 и ndkr3, и он отлично работает.

Теперь, когда я сменил Android SDK версии 1.5 и API версии 3, у меня возникли проблемы с невозможностью открыть библиотеку libtest_demo.so.

05-13 16:54:23.603: INFO/dalvikvm(1211): Unable to dlopen(/data/data/org.abc.test_demo/lib/libtest_demo.so): Cannot find library

Я поместил файл libtest_demo.so в то же место /data/data/org.abc.test_demo/lib/libtest_demo.so, но все еще возникает та же проблема.

В своем Java-файле я назвал нативные библиотеки, например,

 System.loadLibrary("abc_jni");
 System.loadLibrary("test_demo");

И из logcat я видел, что обе библиотеки использовали один и тот же адрес памяти.

Это вывод logcat

05-13 17:56:15.732: DEBUG/dalvikvm(9897): Trying to load lib /data/data/org.abc.test_demo/lib/libabc_jni.so 0x437317f8
05-13 17:56:15.732: DEBUG/dalvikvm(9897): Added shared lib /data/data/org.abc.test_demo/lib/libabc_jni.so 0x437317f8
05-13 17:56:15.742: DEBUG/dalvikvm(9897): Trying to load lib /data/data/org.abc.test_demo/lib/libtest_demo.so 0x437317f8 
05-13 17:56:15.752: INFO/dalvikvm(9897): Unable to dlopen(/data/data/org.abc.test_demo/lib/libtest_demo.so): Cannot find library

1 Ответ

7 голосов
/ 16 сентября 2010

Эта ошибка почти всегда говорит «Не удается найти библиотеку», и для этого может быть много причин. Что раздражает, так это то, что в большинстве случаев это не недостающая библиотека, а что-то еще. Причины, по которым я наткнулся:

  • библиотека отсутствует в каталоге (очевидно),
  • библиотека, которая динамически связана с вашей библиотекой, отсутствует,
  • версии системной библиотеки на устройстве / эмуляторе, которые использует ваша библиотека, отличаются от тех, с которыми вы связывались во время компиляции (пропущенные символы и т. Д.)

Я описал метод, который работал для меня при решении проблемы с библиотекой, которая работала нормально на эмуляторе и не загружалась на Nexus One, возможно, это поможет вам: http://mpigulski.blogspot.com/2010/09/debugging-dlopen-unsatisfiedlinkerror.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...