【发布时间】:2011-05-08 14:26:19
【问题描述】:
我是 Linux 的新手。我在笔记本电脑上安装了 Mint,最近一直在玩它。
我编写了一个简单的 C 程序并保存了文件。 然后在命令行中输入
gcc -c myfile
然后弹出一个名为 a.out 的文件。我天真地(在多年使用 Windows 之后)期望出现一个不错的 .exe 文件。我不知道如何处理这个 a.out 文件。
【问题讨论】:
标签: c linux gcc compilation
我是 Linux 的新手。我在笔记本电脑上安装了 Mint,最近一直在玩它。
我编写了一个简单的 C 程序并保存了文件。 然后在命令行中输入
gcc -c myfile
然后弹出一个名为 a.out 的文件。我天真地(在多年使用 Windows 之后)期望出现一个不错的 .exe 文件。我不知道如何处理这个 a.out 文件。
【问题讨论】:
标签: c linux gcc compilation
使用-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 遗留下来的,它是一种可执行格式。默认情况下,链接器仍将文件命名为 a.out,尽管它们现在倾向于生成 ELF 而不是 a.out 格式的可执行文件。
【讨论】:
-o filename 指定“输出文件名”。 -c 指定“只编译,不链接”。如果不指定输出文件名,编译器会根据filename.c生成filename.o,而链接器默认为a.out
-ansi -pedantic 也可能很有用。 gcc 编译的默认语言是“GNU-C”;并非所有编译器都编译该语言; OTOH,所有所谓的C编译器都可以(以不同程度的难度)编译“C”。 gcc -ansi -pedantic 的行为非常类似于 C (ANSI C89 / ISO C90) 编译器。
a.out 是可执行文件。
运行它:
./a.out
【讨论】:
-c,则无法执行
-cgcc 会生成myfile.o,而不是a.out