Android NDK загрузка библиотеки - UnsatisfiedLinkError - PullRequest
1 голос
/ 17 января 2012

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

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

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

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

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

Ответы [ 4 ]

1 голос
/ 17 января 2012

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

0 голосов
/ 16 апреля 2013

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

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

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

0 голосов
/ 05 апреля 2013

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

#ifdef __cplusplus 
extern "C" {
#endif
    /* ... */
#ifdef __cplusplus
}
#endif
0 голосов
/ 17 января 2012

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

Так что если у вас есть файл с именем libFooBar.so в папке libs в apk-файле, то вам следуетпередать одному из следующих имен в loadLibary - "FooBar", "libFooBar" или "libFooBar.so".

...