zoukankan      html  css  js  c++  java
  • 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文件,就是所需要的动态库)

    参数详解:

  • 相关阅读:
    日程管理系统找Bug
    #单元测试
    读后感
    四则运算
    事后诸葛亮会议
    数据流图和数据流程图
    时序图
    ER图
    uml用例图
    第一迭代感想
  • 原文地址:https://www.cnblogs.com/wobushangwangl/p/14164358.html
Copyright © 2011-2022 走看看