从编译 C 语言文件说起
1 | $ gcc -01 -o p p1.c p2.c |
使用了 gcc 命令来编译,也可以简单写作:cc
。
优化层级为 1,1 级是最低的,层级越高程序优化越好,但增加了编译时间,也使调试变得更难,且跟源程序差异很大不便于理解。
编译的流程是:
- 预处理器(preprocessor)把诸如:
#include
、#define
、#if
、#else
、#elif
、#ifdef
、#endif
等预编译指令替换掉。 - 编译器(compiler)把
.c
源文件编译成.s
的汇编代码文件。 - 汇编器(assembler)把汇编代码文件转换成相应的二进制目标文件
.o
,目标文件已经是机器码了,只是没有填入全局变量的地址。 - 链接器(linker),把多目标文件和库函数链接在一起,形成可执行文件。