一、背景
可执行程序需要链接一些静态库,但是静态库中的函数并没有全部使用,只用了其中的几个,但是系统默认会自动把整个静态库全部链接到可执行程序中,造成可执行程序的大小大大增加,浪费了flash空间和内存空间。
二、方法
因为GCC链接操作以section作为最小的处理单元,只要一个section中有某个符号被引用,该section就会被加入。
如果我们的某个.c程序中所有function都加入同一个section.则如果用到这个.c生成的.o的其中任何一个function.则必须将所有function(符号)加入其中。如此,则使用-ffunction-sections 和 -fdata-sections将每个符号创建为一个sections. sections名与function,data名保持一致。
则在link阶段,-Wl,–gc-sections 申明去掉不用的section。就可以去掉没用的function(符号)了。
1、编译时候加上 -ffunction-sections
2、链接时候加上 -Wl,–gc-sections
本文介绍如何通过GCC编译选项-ffunction-sections和-fdata-sections配合链接选项-Wl,–gc-sections来去除未使用的静态库函数,从而减少最终可执行文件的大小。

被折叠的 条评论
为什么被折叠?



