我用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搜索但没有找到解决此问题的方法。
答案 0 :(得分:10)
答案 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");
}
希望这会对你有所帮助。