Android CMake和ndk-build会生成不同大小的文件

问题描述

我正在尝试查看是否可以合理地从ndk-build迁移到cmake,以构建用于Android的C ++库。

当我使用ndk-build构建完全相同的代码获取静态库(.a)时,它将生成542k文件,而cmake将生成1.7Mb文件

我正在使用boost进行测试构建,仅构建文件系统部分。

两个都是发行版。

我进行了搜索,以查看是否有必要进行一些特定的开关才能获得大致相同的编译结果,而没有成功。

我正在使用ndk版本19以及相关的工具链文件进行构建。

这是一个已知问题吗?

解决方法

CMake和ndk-build不一定使用相同的标志。静态库未剥离,因此对应用程序无关的其他调试信息可能会占用大量空间。

如果最终以APK结尾的.so文件(实际上已被剥离的文件)仍然很大,请使用https://github.com/google/bloaty来区分两者,并查看二进制文件的哪个部分更大。

,

使用 cmake 不剥离调试符号,我的 ndk 版本 21.3.6528147。 使用 strip 命令去除调试符号,例如

#for arm64-v8a
<ndk-path>/toolchains/aarch64-linux-android-4.9/prebuilt/darwin-x86_64/bin/aarch64-linux-android-strip-s -v youlib.so

#for armeabi-v7a
<ndk-path>/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-strip -s -v youlib.so

另见How to enable stripping for cmake on Android