java.lang.UnsatisfiedLinkError:dlopen失败:找不到库“ libXXXXX.so.0”

时间:2018-06-27 11:19:58

标签: android c++ android-studio

我已经在我的android交叉编译环境中从第三方来源创建了libXXXXX.so。构建成功,但是执行过程出现以下错误。

错误日志(logcat)

java.lang.UnsatisfiedLinkError: dlopen failed: library "libXXXXX.so.0" not found

我认为 so.0 是错误的,但是我不知道如何在Android Studio中处理它。

readelf的结果:

$readelf -d libXXXXX.so | grep SONAME<br>
0x000000000000000e (SONAME) Library soname: [libXXXXX.so.0]

CMakeLists.txt像这样:

add_library( libXXXXX SHARED IMPORTED )

set_target_properties( libXXXXX PROPERTIES
IMPORTED_LOCATION ${LIB_ROOT}/cpp/libs/${ANDROID_ABI}/libXXXXX.so )

add_library(hello-jni SHARED src/main/cpp/hello-jni.cpp )

target_link_libraries( hello-jni libXXXXX ${log-lib} )

Java源代码:

static {
    System.loadLibrary("hello-jni");
}
  • 在成功执行libXXXXX.a(静态库)的情况下。
  • libXXXXX.so.0libXXXXX.so放在同一文件夹中。

如何将与SONAME相关的选项附加到CMakeLists.txt?我尝试过,但是我不太了解。

有人可以提出任何解决方案吗?

状态更改。

我将libXXXXX.so添加为Java代码中的loadLibrary。

static {
    System.loadLibrary("XXXXX");
    System.loadLibrary("hello-jni");
}

错误日志如下:

java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "acos" referenced by "...libXXXXX.so"...

在Android中没有功能吗?有解决方案吗?

添加了libm,但仍然存在相同的错误

CMakeLists.txt:

target_link_libraries( hello-jni libXXXXX m ${log-lib} )

Java源代码:

static {
    System.loadLibrary("m");
    System.loadLibrary("XXXXX");
    System.loadLibrary("hello-jni");
}

0 个答案:

没有答案