サードパーティコードをAndroid用にクロスコンパイルし libXXXXX.so を作成してみました。アプリはAndroid Studioでビルドは成功したのですが、アプリ実行時に以下にエラーになります。

logcat エラーログ

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

libXXXXX.so.0 の so.0 がなんとなく原因と思っているのですが、Android Studioで対処方法がわからずにいます。

readelfコマンドで見ると以下です。

$readelf -d libXXXXX.so | grep SONAME
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.so.0 も so ファイルと同じ場所に置いてもエラーのままでした。
・また libXXXXX.a(STATIC LIBRARY)の場合も試し、これは実行も正常に出来ました。

CMakeLists.txtにSONAME関連のオプションを付けたりするのでは?と思い調べたのですが、よくわかりませんでした。解決方法をよろしくお願いいたします。

状況が変わりました。

loadLibraryを行っていませんでした。

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

新たなlogcat エラーログ

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

acos がないエラーなのですが、Androidに acos は存在しないのでしょうか?解決は難しいでしょうか?よろしくお願いいたします。

以下のように変更してみましたが、状況は変わりません(同じエラーのまま)

CMakeLists.txt

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

Java コード

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

引き続きよろしくお願いいたします。