以一个简单的C代码为例,详细讲解gcc整个编译过程。
1、预处理
主要处理#开头的东西,例如头文件处理、条件编译处理、将宏定义进行替换,还可以去掉注释、添加行号等。预处理的命令如下:
gcc -E hello.c -o hello.i
#-E表示预处理 -o表示将file文件作为输出文件
hello.i就是预处理后的文本文件,可以发现,这一阶段进行了宏定义的替换。
2、编译
进行语法分析、词法分析、语义分析。只编译不汇编的命令如下,生成的是汇编文本文件:
gcc -S hello.i -o hello.s
3、汇编
使用汇编器将汇编代码生成为目标代码。再使用nm符号查看命令来查看目标二进制文件。命令如下:
# 使用汇编器as将汇编代码转化为二进制代码,以.o结尾
as hello.s -o hello.o
# 使用nm符号查看命令来查看目标二进制文件
nm hello.o
4、链接
将文件和库函数等糅合打包。生成可执行程序a.out。命令如下:
gcc hello.o