• 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文件,就是所需要的动态库)

    参数详解:

  • 相关阅读:
    centos 7安装gitlab及使用
    jenkins配置自动执行sql脚本
    zabbix监控mysql主从同步
    linux服务器通过mailx邮件发送附件到指定邮箱
    监控pos收银机
    elk安装与配置
    zabbix实时监控mysql业务数据
    Build Eclipse plug-in for Hadoop
    io 一不小心 关闭不住的偶
    hdu 1059二进制优化背包问题
  • 原文地址:https://www.cnblogs.com/wobushangwangl/p/14164358.html
Copyright © 2020-2023  润新知