如何在Android中使用Cmake导入共享库

4

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

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

My CMakeLists.txt is:

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个回答

1

属性 IMPORTED_LOCATION 应包含库文件的完整路径。该属性在文档中明确说明。

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

# 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})

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Ayush Sha

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接