各阶段介绍
- 预处理阶段: 编译器将C源代码中的包含的头文件.h编译进来,将.c预处理输出.i文件。
- 编译阶段: GCC首先要检查代码的规范性、是否有语法错误等,以确定代码的实际要做的工作,在检查无误后,GCC把代码翻译成汇编语言。该选项只进行编译而不进行汇编,生成汇编代码,将预处理输出文件.i汇编成.s文件
- 汇编阶段: 汇编阶段是把编译阶段生成的.s文件转成二进制目标代码,输出.o文件
- 链接阶段: 将编译输出文件.o链接成最终可执行文件.exe
预处理阶段
测试代码
#include <stdio.h>
#define HELLO "Hello, World!"
int main() {
printf(HELLO);
return 0;
}
gcc -E demo.c -o demo.i
阶段处理
- #include <stdio.h>被展开为实际的头文件内容
- 宏HELLO也被展开为字符串"Hello, World!"。
编译阶段
测试代码
gcc -S demo.c -o demo.s
生成文件
生成文件是汇编文件
汇编阶段
测试代码
gcc -c demo.c -o demo.o
生成文件
生成文件是二进制文件,不可执行
链接阶段
测试代码
gcc demo.c -o out
生成文件
生成文件是二进制文件,可以执行