1 预处理
预处理 -E xxx.i 预处理文件
gcc -E xxx.c -o xxx.i
- 头文件展开。 — 不检查语法错误。 可以展开任意文件。
- 宏定义替换。 — 将宏名替换为宏值。
- 替换注释。 — 变成空行
- 展开条件编译 — 根据条件来展开指令。
2 编译
编译 -S xxx.s 汇编文件
gcc -S hello.i -o hello.s
- 逐行检查语法错误。【重点】 — 整个编译4步骤中最耗时的过程。
- 将C程序翻译成 汇编指令,得到.s 汇编文件。
3 汇编
汇编 -c xxx.o 目标文件
gcc -c hello.s -o hello.o
- 翻译:将汇编指令翻译成对应的 二进制编码。
4 链接
链接 无 xxx.exe 可执行文件。
gcc hello.o -o hello.exe
- 数据段合并
- 数据地址回填
- 库引入