使用gcc生成.out文件格式

使用gcc生成.out文件格式,c,gcc,compilation,executable,C,Gcc,Compilation,Executable,如何在x86体系结构上使用gcc生成.out文件格式 使用nasm,我可以使用-f标志轻松实现这一点,例如: [user@host]$ nasm -f aout start.asm [user@host]$ objdump -a start.o start.o: file format a.out-i386-linux start.o [user@host]$ 在linux上,编译.c文件会生成elf对象。如何使用gcc生成a.out文件?这个问题有两个答案。一个是,您需要编译

如何在x86体系结构上使用gcc生成.out文件格式

使用nasm,我可以使用-f标志轻松实现这一点,例如:

[user@host]$ nasm -f aout start.asm 
[user@host]$ objdump -a start.o

start.o:     file format a.out-i386-linux
start.o

[user@host]$ 

在linux上,编译.c文件会生成elf对象。如何使用gcc生成a.out文件?

这个问题有两个答案。一个是,您需要编译一个新的GCC,以aout为目标;这并不像翻转命令行开关那么简单。另一个答案是一个问题:为什么你真的需要这个?我想不出一个合理的理由。

要使用gcc生成a.out格式,需要通知您的链接器这样做。多亏了
-Wl
标志,您可以通过从gcc传递it标志来实现

以下是您将对a.out格式执行的操作:

gcc -Wl,--oformat=a.out-i386-linux file.c -o file.out
您还可以通过键入以下内容显示支持的所有格式:

objdump -i
根据这篇文章


您需要为不同的目标(i386 aout)构建gcc。听起来似乎有道理,因为a.out已被弃用多年(10+)。

您使用的是哪种系统?我认为Linux不再支持a.out可执行文件。我不知道中间对象文件。我相信内核可以配置.out支持,但默认情况下它是关闭的。我编译内核已经有一段时间了,情况可能不再如此。如果在编译时启用了
CONFIG\u BINFMT\u AOUT
,Linux确实支持它。我正在开发一个操作系统,我需要将内核和应用程序打包在一个映像文件中,以便通过一次读取和一次写入(整个映像)快速加载,a.out看起来是实现这一点的理想格式,因为它很简单,并且受到许多引导加载程序的支持。问题是,我有许多对象文件(.o)是elf格式的,所以当我将它们与链接器脚本中的OUTPUT_format(a.out-i386-linux)参数链接时,我会遇到以下错误:“不能以a.out对象文件格式表示节“.comment”。这就是为什么我需要将“gcc-c file.c”从一开始编译成a.out格式,而不是ELF格式。我找到了解决上述问题的方法,使用-fno ident选项。没有生成注释部分,我使用grub启动了a.out内核。谢谢教授,我错过了你的第一条评论,很高兴你自己找到了解决办法:)