因此,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 指示链接器...
CFLAGS 加上 -ffunction-sections -fdata-sections LDFLAGS 加上 --gc-sections 原理如下: -function-sections的意思是,将不同函数编译到不同的section上面。如果没有这个选项,所有的函数都会编译到一个section上面,于是函数就不能被“剥离”。 -fdata-sections同理。 --gc-sections 表示把不要的函数section去掉...
-fdata-sections 以及 -ffunction-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。即使compiler为每个function和data item分配独立的section -Wl,–gc-sections(为何导致符号的缺失?) 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),链接...
-fdata-sections以及 -ffunction-sections 将每个函数或符号创建为一个sections,其中每个sections名与function或data名保持一致。即使compiler为每个function和data item分配独立的section -Wl,–gc-sections(为何导致符号的缺失?) 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),链接...
因此,GCC 在编译时可以使用 -ffunction-sections 和 -fdata-sections 将每个函数或符号创建为一个 sections,其中每个 sections 名与 function 或 data 名保持一致。而在链接阶段, -Wl,–gc-sections 指示链接器去掉不用的section(其中-wl, 表示后面的参数 -gc-sections 传递给链接器),这样就能减少最终的可执行程...
简介:过大第一个原因是包含了符号表,这个可以通过strip删除,文件大小会立即缩水。strip命令提供了不同参数,方便可选择的删除。 除此之外,两个编译参数“-ffunction-sections”和“-fdata-sections”,以及链接参数“-Wl,--gc-sections”可用来删除没有使用到的符号,“-Wl,”表示后面是传递给链接器ld的参数。
GCC在链接的时候以section为原子操作单元,所以可以使用-ffunction-sections/-fdata-sections将每个函数或者符号创建成独立的section,然后结合选项-Wl,--gc-sections让链接器忽略用不到的section,这样就可以减少目标可执行程序的大小。其中-Wl表示将后面的参数传递给链接器,所以也可以直接设置链接器选项。
编译选项对文件大小有着直接且显著的影响。例如,通过添加-fvisibility=hidden,可以隐藏不需要公开的符号,有效减少文件大小。同样,使用-fdata-sections和-ffunction-sections指令,可以分别控制数据和函数节的生成,有助于优化内存布局。在移除无用代码方面,-flto(链接时间优化)是一个重要的选项。它在链接...
fdata-sections Common Report Var(flag_data_sections) Place data items into their own section. fdbg-cnt-list Common Report Var(common_deferred_options) Defer List all available debugging counters with their limits and counts. fdbg-cnt= Common RejectNegative Joined Var(common_deferred_op...