第一步:预处理阶段:gcc -E main.c -o main.i(只进行预编译,不做其他处理)
预处理阶段
去掉注释,加载头文件,代替宏定义,条件编译
条件编译需要文件; .c文件生成产物;预处理文件(以.i结尾)
第二部:编译阶段:gcc -S main.i -o main.s(只编译不汇编,生成汇编代码)
编译阶段的主要工作是把我们的源代码生成相应的汇编代码的过程。这个阶段花费的时间会比较长。它需要对我们的C语言进行语法和语义的分析。如果有语法错误,报错,并结束编译过程。如果没有语法错误,还需要优化我们的代码,把C的源程序转变为汇编代码。需要文件:.i文件 生成产物:汇编文件(以.s结尾)
第三步:汇编阶段:gcc -c main.s -o main.o(只编译不链接,生成目标文件“.o”)
首先我们应该知道汇编代码(汇编指令)并不是机器能够执行的语言。我们还必须把汇编语言翻译
成计算机能识别的机器语言,这个翻译的过程是在汇编阶段完成的。所以在这个阶段把汇编源文件通过
汇编器生成目标文件(二进制机器语言)。
第四步:链接阶段:gcc main.o -o main
把目标文件执行所依赖的所有二进制的其他目标文件及C的库文件都整合成一个可执行文件的过程需要文件:.o文件及各种动态库或静态库
生成产物:可执行程序
|