【编译优化】降低镜像大小,删减未使用的函数和数据
gnu解释
https://gcc.gnu.org/onlinedocs/gnat_ugn/Compilation-options.html
从最终可执行镜像中删除未使用的function和data,是由链接器来完成的。需要以下几个步骤
- function和data编译成单独的section,使用编译参数:-ffunction-sections -fdata-sections
- 链接时删除未使用的段,使用链接命令:-Wl,--gc-sections
- --print-gc-sections 选项可以打印出被裁剪的 sections
1和2,编译和链接参数必须同时使用,才能达到删除的效果。
Ref
- arm clang 编译命令,有较详细的介绍:https://developer.arm.com/documentation/dui0774/l
- https://mp.weixin.qq.com/s/nTvNwP4bXQV9q70B4C9enA
副作用
使用这种方法并不一定能降低镜像的大小。因为他会把一些BSS变量放到代码段,从而增加text段的大小。