Android中,使用cmake编译so需要引用到另一个module编译的so,而另一个module是以引用的方式被调用,该如何配置Cmake
时间: 2024-03-20 21:40:17 浏览: 130
toolchains 编译跨平台的cmake文件配置
如果在Android中使用CMake编译.so文件,并且需要引用到另一个module编译的.so文件,而另一个module是以引用的方式被调用,可以按照以下步骤进行配置:
1. 在CMakeLists.txt文件中,使用`find_library`命令查找其他module编译的.so文件,例如:
```
find_library(otherlib otherlib HINTS ${CMAKE_SOURCE_DIR}/../otherlib/build/intermediates/cmake/debug/obj/${ANDROID_ABI})
```
其中,`otherlib`是要查找的库文件名,`${CMAKE_SOURCE_DIR}/../otherlib/build/intermediates/cmake/debug/obj/${ANDROID_ABI}`是其他module编译的库文件路径。
2. 在CMakeLists.txt文件中,使用`target_link_libraries`命令链接其他module编译的.so文件,例如:
```
target_link_libraries(mylib ${otherlib})
```
其中,`mylib`是要编译的库文件名,`${otherlib}`是其他module编译的库文件名。
3. 在Android.mk文件中,使用`LOCAL_STATIC_LIBRARIES`指定要链接的静态库文件,例如:
```
LOCAL_STATIC_LIBRARIES := otherlib
```
4. 在build.gradle文件中,使用以下代码进行配置:
```
android {
defaultConfig {
ndk {
abiFilters "armeabi-v7a", "x86"
}
externalNativeBuild {
cmake {
cppFlags "-std=c++11 -frtti -fexceptions"
arguments "-DANDROID_PLATFORM=android-21",
"-DANDROID_TOOLCHAIN=clang",
"-DANDROID_STL=c++_shared"
}
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
```
这样配置后,CMake就会自动链接其他module编译的.so文件,并且可以正确调用其他module中的函数。
阅读全文