1.gcc编译器工作流程
我们以hello.c编译过程为例
1.1预处理阶段
指令
gcc-E hello.c -o hello.i
预处理中会展开以#起始的行,试图解释为预处理指令(preprocessing directive) ,其中ISO C/C++要求支持的包括#if/#ifdef/#ifndef/#else/#elif/#endif(条件编译)、#define(宏定义)、#include(源文件包含)、#line(行控制)、#error(错误指令)、#pragma(和实现相关的杂注)以及单独的#(空指令)。
预处理器:cpp
1.2编译阶段
指令
gcc-S hello.i -o hello.s
编译器:gcc
将.s文件生成汇编语言
1.3汇编阶段
指令
gcc-c hello.s -o hello.o
汇编器:as
生成二进制代码
1.4链接器
指令
gcc hello.o -o [应用](默认a.out)
连接器:od
链接器把多个二进制的目标文件(object file)链接成一个单独的可执行文件。
1.5直接使用gcc
指令
gcc hello.s -o [应用](默认a.out)
gcc自动调用编译器汇编器连接器等