编译的四个过程-预处理、编译、汇编、链接

程序编译成可执行文件的过程可分为四步:预处理、编译、汇编、链接。下面将以main.c为目标文件进行详细讲解:
1、预处理:

通过gcc -E main.c -o main.i    生成.i文件将进行如下操作:

1、将所有的#define删除,并展开所有的宏定义。

2、处理所有的预编译指令,例如:#if,#elif,#else,#endif等。

3、处理#include预编译指令,将被包含的文件插入到预编译指令的位置。

4、添加行号信息、文件名标识,便于调试。

5、删除所有的注释。

6、保留所有的#pragma编译指令,因为在编写程序的时候,我们经常要用到#pargma指令来设定编译的状态或者是指示编译器完成一些特定的动作。

7、生成.i文件(包括去注释、宏替换、头文件展开、条件编译),编译生成的.i文件不包含任何宏定义,因为宏已经被展开,并且包含的文件已经被插入到.i文件中。
2、编译(C/C++语音 ------> 汇编):

通过gcc -S main.i –o main.s    生成.s文件,需要进行如下操作:

1、扫描、语法分析、语义分析、源代码分析、目标代码生成、目标代码优化。

2、生成汇编代码。

3、汇总符号。

4、生成.s文件。
3、汇编(汇编 ------> 二进制):

通过gcc –c main.s –o main.o   生成.o文件,需要进行如下操作:

1、根据汇编指令和特定平台,把汇编指令翻译成二进制形式。

2、合并各个section,合并符号表。

3、生成.o文件。
4、链接:

链接过程会进行如下操作:

1、合并各个.obj文件的section,合并符号表,进行符号解析。

2、符号地址重定位。

3、生成可执行文件。
————————————————
版权声明:本文为CSDN博主「Coder个人博客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/code_lyb/article/details/107730817

编译的四个过程-预处理、编译、汇编、链接相关推荐

  1. C++ —— C++程序编译的四个过程

    C++ -- C++程序编译的四个过程 g++是Linux下C++的编译器:我为什么会选择Linux下的g++编译器,就是因为g++可以看到程序从编译到运行的过程做了些什么.而VS等集成开发环境看不到 ...

  2. gcc编译的四个过程

    gcc是什么? GNU编译器套件(GNU Compiler Collection)包括C.C++.Objective-C.Fortran.Java.Ada和Go语言的前端,也包括了这些语言的库(如li ...

  3. Linux 10分钟掌握Linux常用开发工具及编译的四个过程

    Linux下的常用开发工具 软件包管理工具 yum–类似于手机上的应用商店(管理当前系统中能够安装的工具以及卸载的工具,并且实现安装及卸载操作) 1.查看所能安装的软件:yum list 查看所有工具 ...

  4. 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )

    相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...

  5. 高级语言编译的六个过程,解释程序和编译程序的区别

    高级语言编译的六个过程 编译就是要把高级语言的源程序翻译成目标程序的过程. 一般整个过程可划分为词法分析.语法分析.语义分析.中间代码生成.代码优化和目标代码生成6个阶段. 有一种说法 编译有七个过程 ...

  6. 从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接

    从C源代码到可执行文件的四个过程:预处理.编译.汇编.链接 总览 我们将在Linux操作系统中,以C语言的Hello World程序为例,用gcc编译器分步执行这四个步骤. 我们有再熟悉不过的Hell ...

  7. 了解“预编译、编译、汇编、链接”这四个过程对你有很大帮

    转自:胡薇 了解"预编译.编译.汇编.链接"这四个过程对你有很大帮助-电子发烧友网 如有侵权,告知立马删除 补充:C语言条件编译及编译预处理阶段 - Rusty's code - ...

  8. C语言 程序的翻译 预处理 编译 汇编 链接 #define详解

    1.程序的翻译环境和执行环境 执行环境:所在操作系统的平台 win10 win11 linux 翻译环境:MSVC gcc g++ 你的vs 2019 和2022 是集成开发环境把编辑器编译器全部给你 ...

  9. (四)Go 语言编译流程简述

    一.概述 Go 语言编译的最后一个阶段是根据 SSA 中间代码生成机器码,这里谈的机器码是在目标 CPU 架构上能够运行的二进制代码,中间代码生成一节简单介绍的从抽象语法树到 SSA 中间代码的生成过 ...

最新文章

  1. JDBC连接Oracle数据库测试
  2. 查看Oracle有哪些表或者视图
  3. ef 多个左联接查询_.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记...
  4. nodebb使用mysql_centos7.6安装nodebb v1.14.3(2020年)
  5. vue-loader 作用
  6. oc 协议 回调 静态成员_OC问题
  7. C# 从string变量中获取数字
  8. 如何批量从Excel文件中导入数据到数据库(二)
  9. MFC TeeChart 用法整理二
  10. 项目管理中的配置管理
  11. rtc驱动模型及rx8025驱动学习
  12. Matlab roundn()函数使用样例
  13. 2015年1月工作记录和阅读记录
  14. SQLite使用模糊查询
  15. 计算机视觉中的Transformer
  16. 捷讯fw300r虚拟服务器口号,迅捷FW300R无线路由器WDS无线桥接设置方法
  17. css 样式表的三种方式
  18. php实现删除功能,点击删除弹出确认框,点确定删除数据,点取消返回。删除了商品后总价要相应的改变
  19. 24安装失败 spss win10_win10系统安装spss22.0软件的设置办法
  20. RGB颜色空间和CIELab颜色空间互换(matlab代码)

热门文章

  1. r7 4800H和i7-9750H 性能对比评测
  2. 解决@Valid校验List失败问题
  3. 你需要知道的 15 个很棒的 CSS 动画库
  4. VR的内容荒漠,字节救不了
  5. 代 表 教 官 宣 誓 词
  6. Nginx代理服务器缓存清理模块purge
  7. onchange() 事件
  8. 腾讯云服务器如何使用root账号登录,不能使用root登录怎么办
  9. disabled 属性
  10. plupload分片上传php,plUpload分片上传