android NDK загружает библиотеку - UnsatisfiedLinkError

Я разрабатываю игру для Android, которая использует libgdx и физический движок пули. Я могу скомпилировать игру без проблем, но когда я добавляю пулю в игру, она вылетает с этой ошибкой:

.... UnsatisfiedLinkError: Не удалось загрузить маркер: findLibrary вернул null ...

Я могу прекрасно скомпилировать библиотеку пули, но когда я пытаюсь использовать ее в своем коде, она падает. Самое смешное, что у меня есть другой проект, который использует пулю, но без libgdx, и он работает без проблем. Кто-нибудь знает, в чем может быть проблема? Насколько я знаю, ndk-build генерирует только файлы .so и папку obj.

Похоже, файл пули .so не включен в .apk, отсюда и сбой. Как я могу проверить, так ли это? Были ли у кого-нибудь подобные проблемы?

Спасибо за помощь!


person blejzz    schedule 16.01.2012    source источник
comment
вы можете проверить .apk, разархивировав его   -  person Ludevik    schedule 17.01.2012


Ответы (4)


я решил свою проблему. Проблема заключалась в том, что у libgdx есть папки armeabi и armeabi-v7a в папке libs, а у пули — только armeabi. Итак, я удалил armeabi-v7a, и это волшебным образом заработало!

person blejzz    schedule 16.01.2012

Убедитесь, что имя, переданное в System.loadLibrary, совпадает с именем .so в вашем файле .apk. Файл Apk на самом деле является zip-файлом, поэтому вы можете переименовать его в расширение .zip, разархивировать и изучить папку libs внутри.

Итак, если у вас есть файл с именем libFooBar.so в папке libs в файле apk, вы должны передать одно из следующих имен для loadLibary - «FooBar», «libFooBar» или «libFooBar.so».

person Mārtiņš Možeiko    schedule 16.01.2012

У меня возникла эта проблема, когда я начал использовать собственные файлы .cpp вместо собственных файлов .c. Проблема заключалась в том, что я не учитывал изменение имени в инструментах сборки .cpp. Попробуйте добавить следующие определения собственных методов:

#ifdef __cplusplus 
extern "C" {
#endif
    /* ... */
#ifdef __cplusplus
}
#endif
person Michael Landes    schedule 05.04.2013

у меня похожая проблема

вышеприведенный пост был полезен, хотя я проверил свой game.apk, и библиотека so находится в lib/armeabi, но когда я создаю ее в eclipse, она находится в libs/armeabi.

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

person raging met    schedule 16.04.2013