Gab*_*les 5 c linker stm32 ld binutils
从任何自动生成的STM32CubeMx生成的链接器脚本的底部:
/* Remove information from the standard libraries */
/DISCARD/ :
{
libc.a ( * )
libm.a ( * )
libgcc.a ( * )
}
Run Code Online (Sandbox Code Playgroud)
从GNU Binutils ld(链接程序脚本)手册中,3.6.7输出节丢弃:
特殊输出节名称“ / DISCARD /”可用于丢弃输入节。分配给名为“ / DISCARD /”的输出节的任何输入节均不包含在输出文件中。
这3个输入目标文件包含什么,为什么我们丢弃它们中的所有内容(所有输入部分)?
小智 3
在此示例中,/DISCARD/删除了脚本未明确定义的任何其他部分。例如,由于*(.text)、*(.data)、*(.bss)等*(.init_array)已在脚本中前面定义,因此它们进入 ELF。但是libc、libm或libgcc可能包含不必要的固件部分(例如 .foo、.bar、.debug ...),因此 /DISCARD/ 只是将它们擦除,但不是所有部分!