GCC链接操作是以section作为最小的处理单元,只要一个section中的某个符号被引用,该section就会被加入到可执行程序中去。因此,GCC在编译时可以使用 -ffunction-sections 和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接...
而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了。 我们常常使用下面的配置启用这个功能: CFLAGS += -ffunction-sections -fdata-sections LDFLAGS += -Wl,--gc-sections 1 2 例子 main.c 文件如下...
-Wl,--gc-sections: 这是实际传递给链接器的选项,意思是 “Garbage Collect Sections”。链接器会移除所有未被引用或使用的代码段(如函数)和数据段(如变量)。 -Wl,print-memory-usage: 这是是一个链接器选项,用于在链接完成后打印内存使用情况。这对于了解生成的可执行文件或库的内存布局和大小非常有帮助,特别...
GCC在链接的时候以section为单元处理,所以可以尝试使用-ffunction-sections/-fdata-sections将每个函数或者符号创建成独立的section,然后结合选项-Wl,--gc-sections让链接器忽略用不到的section,这样就可以减少目标可执行程序的大小。其中-Wl表示将后面的参数传递给链接器,所以也可以直接设置链接器选项。 注意这个并不是...
指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),链接操作以section作为最小的处理单元(结合-ffunction-sections),只要一个section中有某个符号被引用,该section就会被放入output中。 什么是"被引用",个人认为是指"被调用",或者符号被export引起的链接器认为这是一个接口 ...
–gc-sections –gc-sections表示依赖库中不使用的sections将不被链接,可以减小链接目标的大小,一般跟-ffunction-sections一起使用。用法:-Wl,–gc-sections。 –whole-archive –whole-archive用来告诉链接器,将后面库中出现的所有符号都链接进来,这样有一个好处是链接的时候不需要考虑中间文件和库文件的顺序,以保证链...
1 概念:GCC链接操作是以section作为最小的处理单元,只要一个section中的某个符号被引用,该section就会被加入到可执行程序中去。因此,GCC在编译时可以使用 -ffunction-sections和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections ...
比如__attribute__((section(".text.keep.used.code"))), 第2部分主要修改的是编译阶段,通过在CFLAGS中添加-fdata-sections-ffunction-sections来实现, 第3部分主要修改的是链接阶段,通过在LDFLAGS中添加-Wl,-gc-sections来实现, 第4部分主要修改的是链接脚本,通过在段名称中,新增下面的段申明,主要是为了限制...
Misc Controls : -Wl,–gc-sections 注:1.注意这个gc前面是两个短小的“–”,由于博客的问题直接复制会出错 2.-wl, 表示后面的参数 --gc-sections 传递给链接器 3.-fdata-sections和-ffunction-sections和–gc-sections的说明如下 4.stm32f10x_flash_extsram.ld内容 代码语言:javascript 代码运行次数:0 运行...
问用gcc反汇编编译后的exe文件EN过大第一个原因是包含了符号表,这个可以通过strip删除,文件大小会立即缩水。strip命令提供了不同参数,方便可选择的删除。 除此之外,两个编译参数“-ffunction-sections”和“-fdata-sections”,以及链接参数“-Wl,--gc-sections”可用来删除没有使用到的符号,“-Wl,”表示...