因此,GCC在编译时可以使用 -ffunction-sections 和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程序的大小了...
GCC链接操作是以section作为最小的处理单元,只要一个section中的某个符号被引用,该section就会被加入到可执行程序中去。因此,GCC在编译时可以使用 -ffunction-sections和 -fdata-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接器...
ffunction-sections: 将每个函数放置在单独的段中,以便在链接时可以进行优化。 fdata-sections: 将每个全局变量放置在单独的段中,以便在链接时可以进行优化。 fno-isolate-erroneous-paths-dereference: 禁用错误路径解引用的隔离。 freorder-blocks-algorithm=stc: 使用 Static Topological Ordering 算法来重新排序代码块...
1 编译选项说明 -ffunction-sections: 这个选项告诉编译器将每个函数放在单独的一个 section(段)中,而不是将所有函数放在同一个代码段中。 好处是结合链接器选项--gc-sections使用时,可以去掉未被使用的函数,从而减小最终生成的可执行文件的大小。 -fdata-sections: 类似于-ffunction-sections,但是这个选项是针对数...
-fdata-sections 以及 -ffunction-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。即使compiler为每个function和data item分配独立的section -Wl,–gc-sections(为何导致符号的缺失?) 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),链接...
GCC在链接的时候以section为单元处理,所以可以尝试使用-ffunction-sections/-fdata-sections将每个函数或者符号创建成独立的section,然后结合选项-Wl,--gc-sections让链接器忽略用不到的section,这样就可以减少目标可执行程序的大小。其中-Wl表示将后面的参数传递给链接器,所以也可以直接设置链接器选项。 注意这个并不是...
其他选项(-Wl,--GC-sections)这是向链接器传递链接选项的选项,实际传入链接器的参数为-GC-sections,这个参数会去除没有被引用的段,以减少代码大小。但前提是编译过程中使用了-fdata-sections -ffunction-sections,否则会链接编译生成的所有段,即使没有被引用的段也会参与链接,不会起减少代码大小的作用。
过大第一个原因是包含了符号表,这个可以通过strip删除,文件大小会立即缩水。strip命令提供了不同参数,方便可选择的删除。 除此之外,两个编译参数“-ffunction-sections”和“-fdata-sections”,以及链接参数“-Wl,--gc-sections”可用来删除没有使用到的符号,“-Wl..
/* These sections are generated by the Sun/OracleC++compiler. */ .exception_ranges : ONLY_IF_RO { *(.exception_ranges*) } /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ ...
–gc-sections表示依赖库中不使用的sections将不被链接,可以减小链接目标的大小,一般跟-ffunction-sections一起使用。用法:-Wl,–gc-sections。 –whole-archive –whole-archive用来告诉链接器,将后面库中出现的所有符号都链接进来,这样有一个好处是链接的时候不需要考虑中间文件和库文件的顺序,以保证链接能够成功。