Я создал libXXXXX.so
из сторонних источников в моей среде кросс-компиляции Android. Сборка прошла успешно, но при выполнении возникла следующая ошибка.
Журнал ошибок (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
как loadLibrary в коде Java.
static {
System.loadLibrary("XXXXX");
System.loadLibrary("hello-jni");
}
Журнал ошибок выглядит следующим образом:
java.lang.UnsatisfiedLinkError: dlopen failed: cannot locate symbol "acos" referenced by "...libXXXXX.so"...
Нет функции acos в 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");
}