System.loadLibrary()错误

时间:2013-03-04 15:00:48

标签: android android-ndk

我用android ndk-Standalone工具链成功交叉编译了一个c ++库 然后,我在Eclipse中创建了一个新的android应用程序项目,当我将mylib.so放入jni文件夹并执行ndk-build命令时,它工作正常

Prebuilt       : mylib.so <= jni/
Install        : mylib.so => libs/armeabi/mylib.so

但是在添加时

static{
  System.load("/data/data/my_package/lib/mylib.so");
}

我在logcat中遇到错误

   AndroidRuntime
   Caused by: java.lang.UnsatisfiedLinkError: Cannot load library:
   reloc_library[1306]:      36 cannot locate 'xmlCleanupParser'...``

我用Google搜索但没有找到解决此问题的方法。

5 个答案:

答案 0 :(得分:10)

人们大多忘记剪切“lib”前缀形式的库名。所以如果你有“libusb.so”,你的代码必须是System.loadLibrary(“usb”)......

答案 1 :(得分:6)

我最近遇到了同样的错误。在尝试了SO的几十条建议之后,我终于发现错误出现在我的原生代码中。即使android ndk编译它也没有任何问题/警告。 < / p>

尝试编写一个简单的main函数来测试您的本机代码,并使用g ++ / gcc(或类似的东西)进行编译以检查错误。

我知道提问者为时已晚,但希望其他人认为这有用。

答案 2 :(得分:4)

如果您的.so - 目录中有已编译的本机库(lib/ - 文件),则可以在不使用完整路径的情况下引用它:

static{
  System.load("mylib");
}

tutorial

所示

检查您是否在Header文件中设置了正确的包:How to resolve the java.lang.UnsatisfiedLinkError in NDK in Android?

答案 3 :(得分:4)

try {
       System.load("/data/data/<package name>/lib/libsample-jni.so");
    } catch (UnsatisfiedLinkError e) {
       System.loadLibrary("<sample-jni>"); //remove lib and .so from name
}

这对你有帮助,请。检查。

答案 4 :(得分:2)

请指定您的.so文件,如下所示。

 static {

     System.loadLibrary("mylib");

}

希望这会对你有所帮助。