博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C:源文件编译过程
阅读量:6554 次
发布时间:2019-06-24

本文共 637 字,大约阅读时间需要 2 分钟。

hot3.png

可以大致概括为3个阶段:

  1. 源文件 → 汇编代码(文本)

  2. 汇编代码 → 机器语言(二进制)

  3. 各个目标文件的处理

详细过程:

  1. 预编译处理 Pre-processing(*.c/ *.cpp → *.i)

  • 源文件中的伪指令进行处理,伪指令包括如下几种:

  • 宏定义(#define)

  • 条件编译指令(#ifdef, #ifndef, #else, #elif, #endif等)

  • 头文件包含指令(#include)

  • 特殊符号的处理(如LINE等)

  • 这一步骤的实质就是把源文件中的伪指令替换掉,生成一个没有宏定义、条件编译指令、头文件包含指令和特殊符号的文件,这个文件是源文件的等效文本文件

编译阶段 Compilation(*.i → *.s)及优化阶段(这里不作展开)

  • 对经过预处理阶段输出的文件,进行语法分析词法分析

  • 通过语法分析和词法分析后,编译为汇编代码(文本)

汇编阶段 Assembly(*.s → *.o)

  • 将汇编代码文件编译成机器码(目标文件,二进制)

链接阶段 Linking(*.out)

  • 只在最终输出的可执行文件中记录下相关静态链接库的信息,只在被执行时才加载该部分代码,体积较小,但加载其他库时可能会消耗一点性能

  • 将所需的函数从静态链接库copy到输出的可执行文件中,即最终输出的可执行文件成了上一阶段的目标文件的集合,文件体积较大

  • 静态链接

  • 动态链接

转载于:https://my.oschina.net/SCVTheDefect/blog/522609

你可能感兴趣的文章
J2EE 十三个技术规范
查看>>
结对-象棋-测试过程
查看>>
SQLALchemy之介绍,基本使用
查看>>
堆——优先队列
查看>>
GDI+ Custom Controls with Visual C# 2005
查看>>
跨浏览器本地存储框架(store.js/USTORE.js/Box.js)
查看>>
css3关键帧动画实现轮播效果
查看>>
小白的进阶之路2
查看>>
通过python的import hooks实现像引用代码一样使用配置文件
查看>>
【Ecstore2.0】计划任务/队列/导入导出 的执行问题
查看>>
微信公众平台接入广告投放系统
查看>>
OpenCV学习(28) 轮廓
查看>>
js4数据类型、类型转换
查看>>
Html中Table的简单使用
查看>>
MySQL 索引
查看>>
【第45题】【062题库】2019年OCP认证062考试新题
查看>>
MySQL基础之 存储引擎
查看>>
JavaBean中DAO设计模式介绍(转)
查看>>
vue之样式问题
查看>>
jmeter正则表达式提取器--关联
查看>>