【编译优化】降低镜像大小,删减未使用的函数和数据

gnu解释

https://gcc.gnu.org/onlinedocs/gnat_ugn/Compilation-options.html
从最终可执行镜像中删除未使用的function和data,是由链接器来完成的。需要以下几个步骤

  1. function和data编译成单独的section,使用编译参数:-ffunction-sections -fdata-sections
  2. 链接时删除未使用的段,使用链接命令:-Wl,--gc-sections
  3. --print-gc-sections 选项可以打印出被裁剪的 sections
    1和2,编译和链接参数必须同时使用,才能达到删除的效果。

Ref

副作用

使用这种方法并不一定能降低镜像的大小。因为他会把一些BSS变量放到代码段,从而增加text段的大小。

posted @ 2023-10-05 10:01  zephyr~  阅读(78)  评论(0编辑  收藏  举报