通常我们都是使用下面的命令来直接生成可执行文件
gcc demo.c -o demo
对于我们来说十分简单,但是对编译器来说却完成了一系列复杂的工作,概括起来有如下几步:
1. 预处理
gcc -E demo.c -o demo.i
这一阶段主要处理源文件中的#ifdef、#include和#define等预处理命令
demo.c -> demo.i(经过预处理后的c源代码文件)
2. 编译阶段
gcc -S demo.i -o demo.s
在编译阶段,gcc把预处理后的结果编译成汇编或者目标模块。
demo.i -> demo.s(汇编语言源代码文件)
3. 汇编
gcc -c demo.s -o demo.o
在汇编阶段,编译器把编译出来的结果汇编成具体cpu上的目标代码模块
demo.s -> demo.o(编译后的目标文件)
4. 链接阶段
gcc demo.o -o demo
在链接阶段,把多个目标代码模块连接生成一个大的目标模块,输入机器代码文件(与其他的机器代码文件和库文件),汇集成一个可执行的二进制代码文件。
demo.o -> demo(可执行文件)
时间: 2024-11-06 14:49:53