android NDK加载库 - UnsatisfiedLinkError

时间:2012-01-16 22:08:15

标签: android android-ndk libgdx

我正在开发一款使用libgdx和子弹物理引擎的安卓游戏。我可以毫无问题地编译游戏,但是当我为游戏添加子弹时,它会因此错误而崩溃:

.... UnsatisfiedLinkError:无法加载项目符号:findLibrary返回null ...

我可以很好地编译子弹库但是当我尝试在我的代码中使用它时会崩溃..有趣的是我有另一个项目使用子弹但没有libgdx它没有任何问题。有谁知道可能是什么问题?据我所知,ndk-build只生成.so文件和obj文件夹。

看起来子弹.so文件不包含在.apk中,因此崩溃。我怎么能检查它是不是?有没有人有类似的问题?

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

我已经解决了我的问题。问题是libgdx在libs文件夹中有armeabi和armeabi-v7a文件夹,而bullet只有armeabi。所以我删除了armeabi-v7a,它神奇地工作了!

答案 1 :(得分:0)

检查传递给System.loadLibrary的名称是否与.apk文件中的.so名称相同。 Apk文件实际上是一个zip文件 - 所以你可以将它重命名为.zip扩展名,解压缩并检查里面的libs文件夹。

因此,如果您在apk文件中的libs文件夹下有名为libFooBar.so的文件,那么您应该将以下名称之一传递给loadLibary - “FooBar”,“libFooBar”或“libFooBar.so”。

答案 2 :(得分:0)

当我开始使用.cpp本机文件而不是.c本机文件时,我出现了此问题。问题是我在.cpp构建工具中没有考虑name-mangling。尝试添加以下本机方法定义:

#ifdef __cplusplus 
extern "C" {
#endif
    /* ... */
#ifdef __cplusplus
}
#endif

答案 3 :(得分:0)

我有类似的问题

上面的帖子很有帮助,但是我检查了我的game.apk,所以这个库是在lib / armeabi下,但是当我在libs / armeabi的eclipse中构建它时。

我认为它通常应该在libs之下,如果有人可以帮助我在构建时将lib更改为libs将非常有帮助。