因此,GCC在编译时可以使用 -ffunction-sections 和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了...
因此,GCC在编译时可以使用 -ffunction-sections 和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了。
-function-sections的意思是,将不同函数编译到不同的section上面。如果没有这个选项,所有的函数都会编译到一个section上面,于是函数就不能被“剥离”。 -fdata-sections同理。 --gc-sections 表示把不要的函数section去掉
因此,GCC在编译时可以使用 -ffunction-sections和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了。
-ffunction-sections 编译源文件时,为每个function分配独立的section。 -fdata-sections 编译源文件时,为每个data分配独立的section。 --gc-sections 链接时,以section为最小处理单元,只有当section中有symbol被使用,才将该section链接到output中 我们在编译选项里面加上 -ffunction-sections -fdata-sections, 然后在链接...
将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。即使compiler为每个function和data item分配独立的section -Wl,–gc-sections(为何导致符号的缺失?) 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),链接操作以section作为最小的处理单元(结合-ffun...
GCC在链接的时候以section为单元处理,所以可以尝试使用-ffunction-sections/-fdata-sections将每个函数或者符号创建成独立的section,然后结合选项-Wl,--gc-sections让链接器忽略用不到的section,这样就可以减少目标可执行程序的大小。其中-Wl表示将后面的参数传递给链接器,所以也可以直接设置链接器选项。 注意这个并不是...
–gc-sections表示依赖库中不使用的sections将不被链接,可以减小链接目标的大小,一般跟-ffunction-sections一起使用。用法:-Wl,–gc-sections。 –whole-archive –whole-archive用来告诉链接器,将后面库中出现的所有符号都链接进来,这样有一个好处是链接的时候不需要考虑中间文件和库文件的顺序,以保证链接能够成功。
1. 什么是段(Sections)? 在计算机系统中,内存被划分为多个不同的段(sections)。每个段都有其特定的用途和属性。常见的段包括.text(代码段)、.data(数据段)和.bss(未初始化数据段)等。 •.text:代码段,用于存放程序的可执行指令。 •.data:数据段,用于存放已初始化的全局变量和静态变量。 •.bss:未初...
[TOC] 作为Linux下的C/C++使用者有必要稍微深入了解一下GCC编译器.本文为学习笔记,包含GCC基础知识(部署,编译选项等),编译过程,静态动态库的生成与使用. GCC是Linux平台上最为常用的编译工具,全称GNU Compiler Collection,即GNU编译器套件,是GNU project里的一个重要产物,它包含多种语言的编译器及对应的库.logo是...