gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 10:39:08 32 4
gpt4 key购买 nike

我一直在尝试使用 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 中为那个属性(property)。

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

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

关于java - 如何在 Cmake for Android 中导入共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37709058/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com