- 预处理:头文件、宏展开
- 编译:
- 汇编:生成目标文件
- 链接:链接其他的程序库生成可执行文件
接下来先看gcc的常用选项:
选项名 | 作用 |
---|---|
-o | 产生目标(.i、.s、.o、可执行文件等) |
-E | 只运行C预编译器 |
-S | 告诉编译器产生汇编程序文件后停止编译,产生的汇编语言文件拓展名为.s |
-c | 通知gcc取消连接步骤,即编译源码,并在最后生成目标文件 |
-Wall | 使gcc对源文件的代码有问题的地方发出警告 |
-Idir | 将dir目录加入搜索头文件的目录路径 |
-Ldir | 将dir目录加入搜索库的目录路径 |
-llib | 连接lib库 |
-g | 在目标文件中嵌入调试信息,以便gdb之类的调试程序调试 |
下面看gcc模拟编译的几个步骤:
hello.c 文件内容
#include <stdio.h>
#define HELLO "hello!!\n"
int main(void)
{
printf(HELLO);
return 0;
}
预编译,之后查看hello.i文件可查看到宏展开、头文件展开等
gcc -E hello.c -o hello.i
编译,查看hello.s是个汇编文件
gcc -S hello.i -o hello.s
汇编
gcc -c hello.s -o hello.o
链接
gcc hello.o -o hello
上诉过程可以一次性完成,(编译生成可重定位目标文件)
gcc -c hello.c
或
gcc -c hello.c -o hello.o