java – 如何在Cmake for Android中导入共享库

我一直在尝试使用CMake导入
Android项目但是当我尝试导入这些库并使用终端在Andorid上编译和执行程序时,我收到以下错误:

D/AndroidRuntime( 6162): Shutting down VM
E/AndroidRuntime( 6162): FATAL EXCEPTION: main
E/AndroidRuntime( 6162): Process: org.abc.project, PID: 6162
E/AndroidRuntime( 6162): **java.lang.UnsatisfiedLinkError: dlopen failed: library "libcsoundandroid.so" not found**
E/AndroidRuntime( 6162):    at java.lang.Runtime.loadLibrary(Runtime.java:371)
E/AndroidRuntime( 6162):    at java.lang.System.loadLibrary(System.java:988)
E/AndroidRuntime( 6162):    at org.qtproject.qt5.android.bindings.QtActivity.loadApp

我的CMakeLists.txt是:

add_library(csoundandroid SHARED IMPORTED)
set_property(TARGET csoundandroid PROPERTY IMPORTED_LOCATION /home/ayush/csound-android-6.07.0/CsoundForAndroid/CsoundAndroid/src/main/jniLibs/armeabi/)

add_library(sndfile SHARED IMPORTED)
set_property(TARGET sndfile PROPERTY IMPORTED_LOCATION /home/ayush/csound-android-6.07.0/CsoundForAndroid/CsoundAndroid/src/main/jniLibs/armeabi/)

add_library(c++_shared SHARED IMPORTED)
set_property(TARGET c++_shared PROPERTY IMPORTED_LOCATION /home/ayush/csound-android-6.07.0/CsoundForAndroid/CsoundAndroid/src/main/jniLibs/armeabi/)
set(LIBS1 libcsoundandroid.so)
set(LIBS2 libsndfile.so)
set(LIBS3 libc++_shared.so)
link_directories(/home/ayush/csound-android-6.07.0/CsoundForAndroid/CsoundAndroid/src/main/jniLibs/armeabi)

include_directories(/home/ayush/csound/include)
include_directories(/home/ayush/csound/android/CsoundAndroid/jni/)
target_link_libraries(abc ${LIBS1} ${LIBS2} ${LIBS3} )

这里abc是生成的可执行文件.我列出的所有图书馆都在同一个地方.你能帮我找出错误是什么吗?任何形式的帮助将受到高度赞赏.

最佳答案 属性IMPORTED_LOCATION应包含库文件的完整路径.这是在
documentation年为该财产明确写的.

要与导入的库链接,请使用目标名称,而不是库文件:

# Correctly set property for imported library
set_property(TARGET csoundandroid PROPERTY IMPORTED_LOCATION
    /home/ayush/csound-android-6.07.0/(...)/armeabi/libcsoundandroid.so
)

# And correctly link with it
set(LIBS1 csoundandroid)

target_link_libraries(abc ${LIBS1})
点赞