我最近遇到一个项目需要使用cmake编译的.so库。当用ndk-build编译时,.so库的大小是415k。当用cmake编译时,.so库的大小是4.5M。
Gradle versio插件:gradle:3.0.0', gradle版本:gradle-4.1-all.zip
build.gradle cmake配置:
ndk {
abiFilters 'armeabi','armeabi-v7a','x86'
}
externalNativeBuild {
cmake {
arguments '-DANDROID_PLATFORM=android-21',
'-DANDROID_TOOLCHAIN=clang',
'-DCMAKE_BUILD_TYPE=Release'
targets 'device'
}
}
CMakeLists.txt文件如下:
cmake_minimum_required(VERSION 3.4.1)
set (CMAKE_CXX_STANDARD 14)
set(CMAKE_VERBOSE_MAKEFILE ON)
add_library(so SHARED IMPORTED)
set_target_properties(
so
PROPERTIES IMPORTED_LOCATION
${CMAKE_SOURCE_DIR}/../jniLibs/${ANDROID_ABI}/so.so)
add_library(
myso
SHARED
XXX.cpp
.......
xxx.c
...
)
target_include_directories(myso PRIVATE
src
.....
)
find_library(
log-lib
log )
target_link_libraries(
myso
so
android
log
)
set(distribution_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../../dis)
set_target_properties(myso
PROPERTIES
LIBRARY_OUTPUT_DIRECTORY
"${distribution_DIR}/lib/${ANDROID_ABI}")
我比较两个.so库文件中的符号,发现小.so库有1000行, 与大.so库的前1000行相同,较大的符号比较小的符号多。 我的cmake配置错了吗?
答案 0 :(得分:0)
将 -DANDROID_STL=c++_shared
添加到 build.gradle
静态 C++ 库可能只包含在您的 .so 中。