7

我成功地用 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'...``

我用谷歌搜索但没有找到解决这个问题的任何方法。

4

5 回答 5

11

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

于 2013-09-28T08:00:46.033 回答
6

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

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

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

于 2014-10-15T10:52:50.020 回答
5

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

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

教程所示。


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

于 2013-03-04T15:16:22.230 回答
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
}

这会帮助你,请。查看。

于 2013-07-05T08:26:38.913 回答
2

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

 static {

     System.loadLibrary("mylib");

}

希望这会帮助你。

于 2013-03-04T15:17:50.357 回答