1. 使用-OS编译
Os在-O2的基础上,去除对齐的功能,意在去除空白空间,在与-O2几乎一致的效率上面,追求空间优化
2. objcopy去除comment段
.comment段:存放的是编译器版本信息,比如字符串"GCC:(GNU)4.2.0"
objcopy是交叉编译链的工具
3.去除未被使用的function和data
(1)编译时候加上 -ffunction-sections 和 -fdata-sections
(2)链接时候加上 -Wl,-gc-sections
如: LD_FLAGS += -Wl,-gc-sections CC_FLAGS+=-ffunction-sections
4. 隐藏符号
对于动态库只需要头文件的接口对外可见,其余的隐藏。
(1)对外可见函数加上 __attribute ((visibility("default")))
(2)编译的时候加上-fvisibility=hidden