与将.c文件转换为.o文件并进行链接和组装相比,编译gcc .c文件有什么区别?

时间:2015-02-21 09:42:53

标签: c linux gcc vim compilation

我刚开始参与海湾合作委员会。

假设我们有一个由vim labaled helloworld.c编写的文本文件

为什么SWIM(不是我的人)用

编译它 与 gcc -c helloworld.c 相比, gcc helloworld.c 然后 gcc -o helloWorld helloworld.o

2 个答案:

答案 0 :(得分:1)

编译过程中有一些阶段:

预处理 - >编译 - >装配 - >联。

固定相:

  • 预处理:将.h文件中的一些测试包含到.c文件中,并创建预处理的源代码。
  • 编译:从预处理代码创建汇编代码。
  • 汇编:从汇编代码创建对象模块。
  • 链接:从对象模块创建可执行文件。

使用gcc [options]时:

如果您使用:

  • gcc -E在预处理阶段停止并为您提供预处理代码。
  • gcc -S在编译阶段停止并为您提供汇编程序代码。
  • gcc -c在汇编阶段后停止并为您提供一个对象模块。

gcc -o为您提供包含名称的可执行文件,默认情况下会为您提供a.out

man gcc HERE

答案 1 :(得分:1)

对于一个文件,没有用处。 但是如果你编译一个更大的项目,你可能不想重新编译所有文件,如果你只改变一个文件。因此,获得编译时间。

使用中间.o文件,您只需重新编译需要重新编译的文件,并将最终二进制文件与所有这些对象文件链接起来。

另一个用例是,如果您想使用自定义链接脚本,例如选择部分或代码的位置。然后,您需要从.o个文件中获取实际代码。