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

时间:2016-06-08 17:24:23

标签: java android qt cmake

我一直在尝试使用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 是生成的可执行文件。我列出的所有图书馆都在同一个地方。你能帮我找出错误是什么吗?任何形式的帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:1)

属性 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})