账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    cmake编译.so库体积非常大,求解答
    50
    0

    最近用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行以后多出了很多东西,总共有两万多行,不知道是什么原因造成的。有了解的大神求指教,万分感谢!

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • qq昵称女生带符号 普通会员 1楼

      CMake是一个构建系统,用于管理源代码的构建过程。对于.so库来说,它的体积大小与编译选项有关。以下是几种常见的编译选项,它们可能会影响.so库的大小:

      1. -O3:这个选项可以使程序在不使用编译器性能优化的情况下达到较高的性能。这可能会导致.so库的体积更大。然而,这个选项只在编译器支持并启用的情况下有效。

      2. -m32:这个选项使程序使用32位的操作系统。对于没有32位操作系统的环境,编译器可能会使用一个32位的链接器来编译.so库,这可能会导致.so库的体积更大。

      3. -O2:这个选项与-O3选项相反,它会允许编译器进行性能优化。这可能会导致.so库的体积更小。然而,这个选项只在编译器支持并启用的情况下有效。

      4. -m64:这个选项使程序使用64位的操作系统。对于没有64位操作系统的环境,编译器可能会使用一个64位的链接器来编译.so库,这可能会导致.so库的体积更大。

      5. -fPIC:这个选项使编译器可以将链接器链接选项应用于共享函数,从而避免重复的函数调用。这可能会导致.so库的体积更小。

      请注意,这些选项并不是绝对的,具体的影响取决于你的具体环境和需求。你可以尝试不同的选项来找到最适合你的设置。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部