ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

CFLAGS编译参数-ffunction-sections -fdata-sections的理解

2022-01-05 15:05:31  阅读:185  来源: 互联网

标签:ffunction section fdata CFLAGS main sections 可执行程序


CFLAGS 编译参数-ffunction-sections -fdata-sections的理解

有时我们的程序会定义一些暂时使用不上的功能和函数,虽然我们不使用这些功能和函数,但是系统默认会自动把整个静态库全部链接到可执行程序中,造成可执行程序的大小大大增加。

为了解决前面分析的问题,我们引入了参数-ffunction-sections -fdata-sections。GCC链接操作是以section作为最小的处理单元,只要一个section中的某个符号被引用,该section就会被加入到可执行程序中。因此,GCC编译时可以使用 -ffunction-sections和 -fdata-sections 将为每个函数或符号创建一个sections,在链接阶段使用 -Wl,–gc-sections 指示链接器去掉不用的section,这样就能减少最终的可执行程序的体积。

CFLAGS += -ffunction-sections -fdata-sections //为每个函数或符号创建一个sections,而不是使用整体公共的sections
LDFLAGS += -Wl,--gc-sections	//只链接使用到的sections,也就是使用的到函数或者符号,减少可执行程序的体积
#编译例子
main:
        gcc -ffunction-sections -fdata-sections -c main.c
        gcc -Wl,--gc-sections -o $@ main.o 	# $@:目标文件,$^:所有的依赖文件,$:第一个依赖文件。 所以这里$@是main
readelf -t main.o	//可以查看 为每个函数或符号创建的sections

标签:ffunction,section,fdata,CFLAGS,main,sections,可执行程序
来源: https://www.cnblogs.com/yongfengnice/p/15767078.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有