为什么.so库在用cmake编译后变得非常大?

时间:2017-11-17 08:42:41

标签: cmake java-native-interface .so

我最近遇到一个项目需要使用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配置错了吗?

1 个答案:

答案 0 :(得分:0)

-DANDROID_STL=c++_shared 添加到 build.gradle

静态 C++ 库可能只包含在您的 .so 中。