我使用嵌入式系统。在C源代码构建完成后,我会得到许多文件。文件名相同,但扩展名不同:
.s37 .elf .hex .sig
它们之间有什么区别?主要是.s37和.elf之间的区别是什么?
.s37 .elf .hex .sig
它们之间有什么区别?主要是.s37和.elf之间的区别是什么?
这些只是不同的可执行文件格式。
.s37是SREC格式之一,它是包含十六进制(二进制)的ASCII /行固定文本。
这种格式在大多数嵌入式目标中的闪存/上传软件中广为人知。
.elf
是一个可执行和可链接文件,是像gcc
或其他商业编译器(Windriver,CodeWarrior...)的链接器的产品。
在将.elf
转换为.SREC
并上传到嵌入式目标之前,.elf
格式很难上传,需要使用objcopy
进行转换。内容上的主要区别之一是,.elf
可以包含调试符号,而.srec / .s37
则不能。
我的猜测是您的工具链可以完成所有操作:链接:.elf,然后使用objcopy将.elf转换为.s3以进行目标上传(如果有任何符号信息,则会丢失,这需要在调试目标应用程序时保留.elf
文件,SREC文件仅包含代码和数据,没有调试信息)。
S3格式无法包含符号。它们被丢弃,即使使用简单的objcopy
命令也是如此。该格式仅用于包含要上传到目标上的代码/数据。
symbolsrec
而不是srec
作为目标格式的相同objcopy命令会生成带有符号的输出,而srec
输出则没有。我已经进行了编辑以澄清。 - Jean-François Fabre