直到最近,我认为部分名称通常必须以点.
开头。但是,在研究我的裸机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
这使我得出结论,开始使用.
的部分名称似乎只是约定而不是要求。
COMMON
?.bss
输出部分实际上包含非.bss
部分,这让我感到很困惑。 .text
部分也是如此。我的.text
输出部分中包含大量非.text
部分。为什么通常只给他们自己的输出部分?那不是更合乎逻辑吗?这背后是否有任何真正的原因,或只是它的方式?