编译的四个过程-预处理、编译、汇编、链接
编译的四个过程-预处理、编译、汇编、链接
程序编译成可执行文件的过程可分为四步:预处理、编译、汇编、链接。下面将以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
编译的四个过程-预处理、编译、汇编、链接相关推荐
- C++ —— C++程序编译的四个过程
C++ -- C++程序编译的四个过程 g++是Linux下C++的编译器:我为什么会选择Linux下的g++编译器,就是因为g++可以看到程序从编译到运行的过程做了些什么.而VS等集成开发环境看不到 ...
- gcc编译的四个过程
gcc是什么? GNU编译器套件(GNU Compiler Collection)包括C.C++.Objective-C.Fortran.Java.Ada和Go语言的前端,也包括了这些语言的库(如li ...
- Linux 10分钟掌握Linux常用开发工具及编译的四个过程
Linux下的常用开发工具 软件包管理工具 yum–类似于手机上的应用商店(管理当前系统中能够安装的工具以及卸载的工具,并且实现安装及卸载操作) 1.查看所能安装的软件:yum list 查看所有工具 ...
- 【C 语言】编译过程 分析 ( 预处理 | 编译 | 汇编 | 链接 | 宏定义 | 条件编译 | 编译器指示字 )
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- 高级语言编译的六个过程,解释程序和编译程序的区别
高级语言编译的六个过程 编译就是要把高级语言的源程序翻译成目标程序的过程. 一般整个过程可划分为词法分析.语法分析.语义分析.中间代码生成.代码优化和目标代码生成6个阶段. 有一种说法 编译有七个过程 ...
- 从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接
从C源代码到可执行文件的四个过程:预处理.编译.汇编.链接 总览 我们将在Linux操作系统中,以C语言的Hello World程序为例,用gcc编译器分步执行这四个步骤. 我们有再熟悉不过的Hell ...
- 了解“预编译、编译、汇编、链接”这四个过程对你有很大帮
转自:胡薇 了解"预编译.编译.汇编.链接"这四个过程对你有很大帮助-电子发烧友网 如有侵权,告知立马删除 补充:C语言条件编译及编译预处理阶段 - Rusty's code - ...
- C语言 程序的翻译 预处理 编译 汇编 链接 #define详解
1.程序的翻译环境和执行环境 执行环境:所在操作系统的平台 win10 win11 linux 翻译环境:MSVC gcc g++ 你的vs 2019 和2022 是集成开发环境把编辑器编译器全部给你 ...
- (四)Go 语言编译流程简述
一.概述 Go 语言编译的最后一个阶段是根据 SSA 中间代码生成机器码,这里谈的机器码是在目标 CPU 架构上能够运行的二进制代码,中间代码生成一节简单介绍的从抽象语法树到 SSA 中间代码的生成过 ...
最新文章
- JDBC连接Oracle数据库测试
- 查看Oracle有哪些表或者视图
- ef 多个左联接查询_.NET 云原生架构师训练营(模块二 基础巩固 EF Core 查询)--学习笔记...
- nodebb使用mysql_centos7.6安装nodebb v1.14.3(2020年)
- vue-loader 作用
- oc 协议 回调 静态成员_OC问题
- C# 从string变量中获取数字
- 如何批量从Excel文件中导入数据到数据库(二)
- MFC TeeChart 用法整理二
- 项目管理中的配置管理
- rtc驱动模型及rx8025驱动学习
- Matlab roundn()函数使用样例
- 2015年1月工作记录和阅读记录
- SQLite使用模糊查询
- 计算机视觉中的Transformer
- 捷讯fw300r虚拟服务器口号,迅捷FW300R无线路由器WDS无线桥接设置方法
- css 样式表的三种方式
- php实现删除功能,点击删除弹出确认框,点确定删除数据,点取消返回。删除了商品后总价要相应的改变
- 24安装失败 spss win10_win10系统安装spss22.0软件的设置办法
- RGB颜色空间和CIELab颜色空间互换(matlab代码)