我已经在我的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.0
与libXXXXX.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");
}