Linux新手问题:GCC编译器输出

5
我是一个完全不懂Linux的新手。我在笔记本上安装了Mint,并最近开始尝试使用它。
我编写了一个简单的C程序并保存了文件。 然后在命令行中输入:
gcc -c myfile

然后弹出了一个名为a.out的文件。我天真地(在多年使用Windows之后)期望会出现一个漂亮的.exe文件。我不知道该如何处理这个a.out文件。

2个回答

9

使用-o命名并跳过-c:

gcc -Wall -o somefile myfile

虽然你需要给你的源文件命名为.c扩展名。

将两个源文件编译成可执行文件的典型方法:

#Compile (the -c) a file, this produces an object file (file1.o and file2.o)

gcc -Wall -c file1.c
gcc -Wall -c file2.c

#Link the object files, and specify the output name as `myapp` instead of the default `a.out`

gcc -o myapp file1.o file2.o

您可以将此步骤合并为一个步骤:
gcc -Wall -o myapp file1.c file2.c

或者,对于您只有一个源文件的情况:
gcc -Wall -o myapp file.c
-Wall部分的意思是“启用(几乎)所有警告” - 这是一个你应该从一开始就养成的习惯,它将节省你很多头痛调试奇怪问题的时间。 a.out名称是旧的Unix系统中可执行文件格式的遗留物。尽管链接器现在 tend 生成ELF而不是a.out格式的可执行文件,但链接器默认仍然将文件命名为a.out

谢谢。只是为了明确,myfile 是源文件的名称,对吗?而 somefile 是输出可执行文件的名称? - user485498
@JJG:没错。-o filename 指定了“输出文件名”。-c 指定了“仅编译,不链接”。如果您没有指定输出文件名,则编译器会根据 filename.c 生成一个 filename.o,而链接器则默认为 a.out - Erik
另外,如果您倾向于使用不同的编译器进行编译,则-ansi -pedantic也可能很有用。默认语言gcc编译的是“GNU-C”;并非所有编译器都能编译该语言;另一方面,所有所谓的C编译器都可以(难度不同)编译“C”。 gcc -ansi -pedantic的行为非常类似于C(ANSI C89 / ISO C90)编译器。 - pmg

3

a.out是可执行文件。

运行它:

./a.out

1
如果他传递了“-c”,那么它是不可执行的。 - Erik
谢谢。但是为什么默认情况下它的名称不与源文件相同呢?另外,我尝试通过双击桌面上的文件打开它,但它无法打开。 - user485498
2
如果他真的通过了“-c”,那么gcc应该生成myfile.o而不是a.out。 - Trent
@JJG,你需要问gcc的实现者 :) - Trent
Trent,你说得对吗?我两个都试过了,忘记哪个产生了哪个输出。但是我更感兴趣的是这个 a.out 文件是什么。 - user485498
这有点晚了,但你应该阅读这篇文章:http://gcc.gnu.org/ml/gcc/2003-01/msg01338.html - user1655874

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接