C++之gcc编译过程(原理)

在平时gcc编译中,通常的一步编译操作为:

gcc b.c -o b

在使用gcc编译的过程中,那么这个文件编译过程到底是什么?

上述gcc命令其实依次执行了四步操作:

1.预处理(Preprocessing),

2.编译(Compilation),

3.汇编(Assemble),

4.链接(Linking)。

一、预处理阶段

在该阶段,会将b.h文件(头文件)中的宏定义、引用和文件中的符号定义替换为真正的内容。预处理之后得到的仍然是文本文件,但文件体积会大很多。这是因为预处理中做了一些符号替换操作。

注:预处理阶段不检查语法

比如,在b.c头文件中引用了a.cpp/a.c,那么在预处理阶段,会将a.cpp/a.c中的符号加载到b.c中,这样才会在b.c中合理使用。

该阶段生成    .i 后缀文件

gcc -E b.c -o b.i

二、编译阶段

该阶段是将经过预处理之后的程序转换成特定汇编代码的过程,该步会检查语法,通常编程报错就是在该阶段。

该阶段生成   .s后缀文件

gcc -S b.i -o b.s

三、汇编阶段

汇编过程将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目标文件,是二进制格式。

该阶段生成   .o文件

gcc -c b.s -o b.o

四、链接阶段

链接过程将多个目标文件以及所需的库文件(.so等)链接成最终的可执行文件。需要启动代码、库代码等。

gcc  b.o -o b

  在该过程可以使用ldd b来查询需要哪些动态库。(Windows中运行程序中的.dll文件,就是所需要的动态库)

参数详解:

原文地址:https://www.cnblogs.com/wobushangwangl/p/14164358.html