GCC编译过程分按照顺序分为以下四个步骤
1、预处理(Pre-Processing)
使用的工具是编译器
2、编译(Compiling)
使用的工具是编译器
3、汇编(Assembling)
使用的工具是汇编器
4、链接(Linking)
使用的工具是链接器
预处理阶段处理的是以#开头的指令,如#define、#include以及#ifdef…#endif等,这些#开头的指令是GCC编译器的指令,并不是C语言的语法,使用选项-E即可查看预处理的结果,预处理生成的文件是.i文件,预处理完成后,编译过程即停止。
编译阶段进行代码规范性检查和语法检查,检查无误后,GCC把C语言代码翻译成汇编语言代码,使用选项-S即可查看编译阶段的结果,编译阶段生成的文件是.s文件,编译阶段完成后,编译过程即停止。
汇编阶段把编译阶段生成的.s文件转换成ELF二进制OBJ文件,使用选项-c即可查看汇编阶段的结果,汇编阶段生成的文件是.o文件,汇编阶段完成后,汇编过程即停止。
链接阶段把汇编阶段生成的OBJ文件、系统库的OBJ文件以及库文件链接起来,生成可以在特定平台上运行的可执行文件,链接阶段生成的文件是.out文件,链接阶段需要用到链接器脚本。
gcc hello.c -o hello.out 预处理--->编译--->汇编--->链接
gcc -E hello.c -o hello.i 预处理
gcc -S hello.c -o hello.s 预处理--->编译
gcc -c hello.c -o hello.o 预处理--->编译--->汇编