我正在尝试使用gcc-arm-linux-gnueabi
和-nostdlib
编译嵌入式arm处理器,以删除对c库和启动文件的依赖关系。该芯片没有任何解释elf文件的方法,因此使用objcopy -O binary
,我可以从中删除elf标头。但是,如果我保留构建ID,则二进制文件在输出的开头具有构建ID,因此无法运行。我可以使用/DISCARD/ : { *(.note.gnu.build-id) *(.ARM.attributes) }
删除链接描述文件中的构建ID,但是链接器会警告.note.gnu.build-id section discarded, --build-id ignored.
。虽然这很好,并且代码在芯片上运行良好,但我不想传递然后删除构建ID。有没有办法指示gcc
将命令传递给链接器而不传递--build-id
?
答案 0 :(得分:17)
答案 1 :(得分:0)
这是一篇过时的文章,但值得一提的是,您不必丢弃构建ID。您可以选择通过编辑链接描述文件将其移至Flash的另一个区域。
只需将构建ID移到文本部分中向量表之后的某个位置即可
.text :
{
. = ALIGN(4);
_stext = .;
KEEP(*(.vectors .vectors.*))
KEEP(*(.note.gnu.build-id))
*(.text .text.*)
*(.rodata .rodata*)
. = ALIGN(4);
_etext = .;
} > rom
这会将向量表保留在地址0x0(您的MCU可能需要此地址),但也允许您从代码中读取构建ID,这可能会派上用场!