ELF(可执行和可链接格式)文件生成中使用avr-gcc和avr-ld的区别

时间:2018-11-29 01:12:56

标签: c gcc linker microcontroller avr

对不起,如果这可能不合时宜。 在使用avr-gcc或avr-ld生成.hex(Intel HEX格式)文件的过程中,输出(最终结果)明显不同。作为最低限度的说明,我正在谈论在生成目标文件之后立即生成ELF文件的步骤。

在第一次尝试时,我使用avr-ld来生成我的ELF文件。程序运行正常,但是在生成HEX文件并将其上传到我的板上后,它什么也没做(就像上传空白的HEX文件一样)。

第二次尝试时,我遵循了here发现的建议:

  

在链接时指定MCU类型非常重要。编译器使用-mmcu选项选择链接在一起的启动文件和运行时库。如果未指定此选项,则编译器默认为8515处理器环境,这无疑是您不想要的。

它如我所料。上传了HEX文件,我的开发板也进行了相应更新。

所以我的问题如下:

  1. 链接器(avr-ld)为什么会丢失有关我正在使用的微控制器的信息。我以为MCU信息存储在对象文件中。
  2. 此配置背后的逻辑是什么?我的思维方式是否错误(使用avr-gcc来编译/生成.o文件,使用avr-ld链接.o文件并生成EFL文件,而使用avr-objcopy只剥离有用的信息并更改文件ELF-> HEX的格式?
  3. 使用avr-ld和生成avr-gcc来生成我的ELF文件时,是否可以使用相同的输出?

0 个答案:

没有答案