Mul*_*ync 6 c linker ld sections
直到最近,我认为部分名称通常必须以点开头.。但是,在研究我的裸机 C-IDE 的示例链接器文件时,我注意到似乎有一个例外:COMMON.
.text :
{
KEEP(*(.isr_vector))
*(.text*)
KEEP(*(.init))
KEEP(*(.fini))
/* .ctors */
*crtbegin.o(.ctors)
*crtbegin?.o(.ctors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)
*(SORT(.ctors.*))
*(.ctors)
/* .dtors */
*crtbegin.o(.dtors)
*crtbegin?.o(.dtors)
*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)
*(SORT(.dtors.*))
*(.dtors)
*(.rodata*)
KEEP(*(.eh_frame*))
} > ROM
.bss (NOLOAD):
{
*(.bss*)
*(COMMON)
} > RAM
Run Code Online (Sandbox Code Playgroud)
这使我得出结论,以 开头的部分名称.似乎只是约定而不是要求。
COMMON?.bss我的.bss输出部分实际上包含了一个非部分,这让我感到相当困惑。同去同.text部分。.text我的.text输出部分中包含大量非部分。为什么只是给他们自己的输出部分并不常见?这不是更合乎逻辑吗?这背后是否有任何真正的原因,或者只是它的方式?