C语言编译链接生成可执行文件四大步骤:预处理(-E)->编译(-S)->汇编(-c) ->链接
文章目录
- 一、编译过程简介
- 1、预处理器
- 2、编译器
- 3、汇编器
- 二、链接过程简介
- 1、静态链接: 由链接器在链接时将库的内容直接加入到可执行程序中
- 2、动态链接:
一、编译过程简介
编译过程可以分为4部分内容组成预处理器->编译器->汇编器->链接器
1、预处理器
(1)、处理所有的注释,以空格代替(2)、讲所有的#define删除,并且展开所有的宏定义(3)、处理条件编译指令#if,#ifdef、#elif,#else、#endif(4)、处理#include,展开文件包含(5)、保留编译器需要使用#pragma指令预处理指令示例:gcc -E file.c -o file.i
2、编译器
(1)、对预处理文件进行语法分析、词法分析、语义分析语法分析:分析表达式是否遵循语法规则词法分析:分析关键字,标识符,立即数是否合法语义分析:在语法分析基础上进一步分析表达式是否合法(2)、分析结束后进行代码优化生成相应的汇编代码文件编译指令示例:gcc -S file.i -o file.s
3、汇编器
(1)、汇编器将汇编代码转变为机器可以执行的指令,也就是机器指令(2)、每条汇编指令几乎都对应一条机器指令汇编指令示例:gcc - c file.s -o file.o
二、链接过程简介
链接是指将目标文件最终生成可执行文件根据链接方式的不同,链接过程可以分为:1、静态链接:目标文件直接进入可执行文件2、动态链接:在程序启动后才动态加载目标文件链接器的意思:链接器的主要作用是把各个模块之间相互引用部分处理好,使得各个模块之间能够正确的链接
1、静态链接: 由链接器在链接时将库的内容直接加入到可执行程序中
2、动态链接:
(1)、可执行程序在运行时才动态加载库进行连接(2)、库的内容不会进入可执行程序
引用文章:C语言编译和链接过程简介
C语言编译链接生成可执行文件四大步骤:预处理(-E)->编译(-S)->汇编(-c) ->链接相关推荐
- MATLAB中用Application Complier生成可执行文件的步骤及相关注意事项
生成可独立执行的软件,可以分成以下5个主要的步骤: 1.打开Application Complier 2.添加主程序文件 3.可执行文件设置 4.选择打包方式 5.相关文件解释 大体步骤多类似,里面有 ...
- linux c语言编译成exe,C/C++程序从编译到最终生成可执行文件的过程分析
C/C++程序编译步骤 如何生成可执行文件 电子计算机所使用的是由"0"和"1"组成的二进制数,二进制是计算机的语言的 基础.计算机发明之初,人们只能降贵纡尊, ...
- C/C++程序从编译到最终生成可执行文件的过程分析
转载http://apps.hi.baidu.com/share/detail/32660500 C/C++程序编译步骤 如何生成可执行文件 ***************************** ...
- 使用 ld 命令链接目标文件生成可执行文件
1.目标文件生链接成可执行文件依赖的库和目标文件 使用 ld 链接目标文件生成可执行文件,用于取代命令 g++,仅仅用于学习 ld 命令的使用,不用于实际的项目编译. 首先看一个简单的 C++ 源文件 ...
- C语言 目标文件和可执行文件(ELF文件)
转自:https://www.jianshu.com/p/7c609b70acbd 1.C语言创建程序 1.1C语言创建(分为4个步骤) 编辑 编译 链接 执行 编辑:就是创建和修改C程序的源代码-我 ...
- 自己动手构造编译系统:编译、汇编与链接
"自己动手系列" 自己动手构造编译系统 编译.汇编与链接 范志东 张琼声 著 图书在版编目(CIP)数据 自己动手构造编译系统:编译.汇编与链接 / 范志东,张琼声著. -北京 ...
- 这是预编译工具生成的文件_组件化架构 10.编译优化
软件研发中,耗费最多时间的并不是编写代码,而是代码编译和代码不断调试的过程 软件试错时间 Android基础编译流程 编译构建的四个步骤: 代码编译:将源代码,R文件,AIDL生成的文件等 编译成.c ...
- Python 二维码的读取与生成:使用链接生成二维码、读取二维码里的链接
Python 二维码的读取与生成演示 ① 使用链接生成二维码 ② 读取二维码里的链接 [ 文章推荐 ] Python 绘制中国地图:使用 pyecharts 最新版本绘制中国地图实例详解,个性化地图定 ...
- 汇编、链接、加载的原理
本文为下面两本书的读书笔记. Assemblers And Loaders.pdf - Free download books Linkers and Loaders Mirror (wh0rd.or ...
最新文章
- JAVA 实现 快速排序算法
- 硅谷与人工智能的一段风流暧昧史
- 检查SELECTION-SCREEN 上面输入的参数是否合适
- 深度学习(32)随机梯度下降十: 手写数字识别问题(层)
- DevExpress控件之GridControl控件
- 【牛客 - 551G】CSL的训练计划(二分 + 拓扑排序 + 优化卡常)
- 阿里云使用笔记-Lrzsz上传下载文件-centos7
- 信息学奥赛一本通(1006:A+B问题)
- python 的列表遍历删除
- JavaScript常用设计模式
- Android开发学习笔记:圆角的Button
- HDOJ_2006_求奇数的乘积
- 上银驱动器使用手册_上银伺服电机调试说明书PPT课件
- 陶哲轩论文解析:从特征值到特征向量
- 常看:前端面试题搂搂
- bzoj3384[Usaco2004 Nov]Apple Catching 接苹果*bzoj1750[Usaco2005 qua]Apple Catching*
- android拦截所有短信源码,Android手机防短信电话骚扰宝典 手机也会思考
- 请让我像亲人一样爱你
- Containerd高级命令行工具nerdctl安装及使用
- 联想台式修复计算机,联想台式电脑如何一键恢复出厂设置
热门文章
- 【Python】Flask 框架安装虚拟环境报错—处理中......
- ALV标准过滤功能失效
- 如何获取尚未开票信息(包括交货单、销售订单)
- ABAP如何生成UUID
- ABAP知识:LIKE LINE OF 和LIKE TABLE OF
- SAP PP生产订单相关信息的获取
- 如何在TC里输出下拉列表
- 这届不敢看体检报告的年轻人还能“年轻”多久?
- 退市再上市,泡泡玛特的”盲盒泡泡”这次能吹多大?
- java 字符串驻留_java String 以及字符串直接量 与 字符串驻留池 ...