cmake编译.so库体积非常大,求解答

最近用cmake替代ndk-build编译so库,编译出来的so库打出很多,ndk-build编译的400k左右,cmake编译出的达到4.5M。
Gradle插件的版本是: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 'myso'
    }
}`

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}")

我用as打开两个myso.so库对比了下里面的字符,前1000行是一样的,用cmake编译出来的1000行以后多出了很多东西,总共有两万多行,不知道是什么原因造成的。有了解的大神求指教,万分感谢!

湖上湖
浏览 1721回答 4
4回答

哔哔one

看看是不是没去掉调试信息,strip还是什么flag来着,用这个关键字谷歌一下

弑天下

好久没有上,贴上下我的解决方案,希望对遇到同样问题的朋友有帮助。再次感谢@darkengine.该问题是编译过程中生成二进制码没有被剥除,需要在CMakeLists.txt中加入如下设置。set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} -s")set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -s")

森林海

同样遇到这个问题了,楼主怎么解决的?cmake设置了为release,但是打出的包却是debug的包,非常大

芜湖不芜

大神怎么解决的,可以把详细步骤给描述下?
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java