C语言的构建流程并不是简单的"连接-编译到汇编",而是一个多步骤的过程,正确的顺序通常是:
预处理(Preprocessing):处理源代码中的预处理指令(如
#include
、#define
等),展开宏,引入头文件内容,生成预处理后的源代码。编译(Compilation):将预处理后的源代码转换为汇编语言代码(.s或.asm文件)。
汇编(Assembly):将汇编语言代码转换为机器语言指令(二进制目标代码),生成目标文件(.o或.obj文件)。
链接(Linking):将多个目标文件以及所需的库文件组合在一起,解决外部符号引用,最终生成可执行文件。
简单来说,完整流程是:源代码(.c) → 预处理 → 编译 → 汇编 → 链接 → 可执行文件
举个例子,对于hello.c
文件:
gcc -E hello.c -o hello.i
:预处理,生成hello.igcc -S hello.i -o hello.s
:编译,生成汇编代码hello.sgcc -c hello.s -o hello.o
:汇编,生成目标文件hello.ogcc hello.o -o hello
:链接,生成可执行文件hello
这个过程中,编译是生成汇编代码,汇编是生成机器码,链接是组合各个部分并解决依赖关系。