Skip to content

C语言的构建流程并不是简单的"连接-编译到汇编",而是一个多步骤的过程,正确的顺序通常是:

  1. 预处理(Preprocessing):处理源代码中的预处理指令(如#include#define等),展开宏,引入头文件内容,生成预处理后的源代码。

  2. 编译(Compilation):将预处理后的源代码转换为汇编语言代码(.s或.asm文件)。

  3. 汇编(Assembly):将汇编语言代码转换为机器语言指令(二进制目标代码),生成目标文件(.o或.obj文件)。

  4. 链接(Linking):将多个目标文件以及所需的库文件组合在一起,解决外部符号引用,最终生成可执行文件。

简单来说,完整流程是:源代码(.c) → 预处理 → 编译 → 汇编 → 链接 → 可执行文件

举个例子,对于hello.c文件:

  • gcc -E hello.c -o hello.i:预处理,生成hello.i
  • gcc -S hello.i -o hello.s:编译,生成汇编代码hello.s
  • gcc -c hello.s -o hello.o:汇编,生成目标文件hello.o
  • gcc hello.o -o hello:链接,生成可执行文件hello

这个过程中,编译是生成汇编代码,汇编是生成机器码,链接是组合各个部分并解决依赖关系。

尘埃虽微,积之成集;问题虽小,记之为鉴。 雾中低语,心之所向;思绪飘渺,皆可成章。