target_link_libraries
target_link_libraries 是 CMake 中用于将共享库或静态库链接到目标可执行文件或共享库的命令。
1 2
| // 其中,<target> 是要链接库的目标文件的名称,item1、item2 等是要链接到目标文件的库的名称。 target_link_libraries(<target> [item1] [item2] [...])
|
example:
1 2
| add_library(mylib SHARED mylib.cpp) target_link_libraries(myexe mylib)
|
1 2 3
| add_library(mylib1 SHARED mylib1.cpp) add_library(mylib2 SHARED mylib2.cpp) target_link_libraries(mylib2 mylib1)
|
上述代码将创建两个共享库 mylib1 和 mylib2,并将 mylib1 链接到 mylib2 中。这意味着,在链接 mylib2 时,CMake 将自动链接 mylib1。
AS 中 so 文件的生成位置
\app\build\intermediates\cmake\debug\obj
module build.gradle setting
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| defaultConfig { ...
externalNativeBuild { cmake { cppFlags "-std=c++11" abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64' } }
ndk { abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64' } }
externalNativeBuild { cmake { path "CMakeLists.txt" } }
|
CMakeLists.txt example
1 2 3 4 5 6 7 8
| cmake_minimum_required(VERSION 3.4.1)
add_library(fibonacci SHARED jni/fibonacci.cpp) // fibonacci.cpp is located under /app/jni/fibonacci.cpp
find_library(log-lib log)
target_link_libraries(fibonacci ${log-lib})
|
located under folder /app
add multi cpp files
1 2 3 4 5 6 7 8 9 10
| add_library( native-lib
// 此处使用 SHARED 标志将库设置为共享库。如果需要将库设置为静态库,则应使用 STATIC 标志。 SHARED
src/main/cpp/native-lib.cpp src/main/cpp/another-file.cpp )
|
1 2 3 4 5 6 7 8 9 10 11
|
extern "C" JNIEXPORT jint JNICALL
Java_com_cmder_jnitest_MainActivity_calculateFibonacci(JNIEnv* env, jobject thiz, jint n) { return fibonacci(n); }
|
add so files in Android Studio
1 2 3 4 5 6 7 8 9 10 11
| android { sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] jniLibs.srcDirs = ['libs'] } } }
|