如果这可以帮助某人,这里如何在本机代码 c/c++ 中加载库:
1 - 避免 java.lang.UnsatisfiedLinkError: dlopen failed: 将此添加到 build.gradle 到 android 块中:
sourceSets {
main {
jniLibs.srcDirs = ['src/main/jniLibs']
}
}
假设你的 lib 文件在
src/main/jniLibs/{架构}/
(取决于您的jniLibs 文件夹在哪里,在我的情况下,它位于app/src/main/,但大部分时间位于app/)
2 - 在您的 CMakeList 中,通过添加以下块将您的库添加为 SHARED 和 IMPORTED:
add_library(mylib SHARED
IMPORTED
)
3 - 通过添加以下块添加目标属性以定位您的 lib mylib.so:
set_target_properties( mylib PROPERTIES
IMPORTED_LOCATION
${PROJECT_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/mylib.so
)
我们在这里后退(/../),因为我们认为 CMakeLists.txt 在
src/main/cpp/
否则,大部分时间在app/文件夹中,这种情况下,我们不需要后退。
所以在进入 jniLibs/ 之前我们必须回到 main/
4 - 将您的 lib mylib 添加到您的目标链接库:
target_link_libraries(native-library-jni
..
..
mylib
..
..
)
5 - 最后,要调用 lib
mylib.so 的方法,您必须创建/复制包含这些方法签名的标头并将其包含在源文件中:
#include "mylib.h"
你现在可以调用你的方法[namespace::]method(args...)
额外链接:
PROJECT_SOURCE_DIR
CMAKE_SOURCE_DIR
Q : Are CMAKE_SOURCE_DIR and PROJECT_SOURCE_DIR the same in CMake?