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

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

预处理(Preprocess).

使用Preprocessor Directives将一些代码替换成另一些代码. 例如将include替换成它指向的文件包含的代码.

编译成目标文件(Compiation).

需要两个回合(pass):

  1. 将代码解析成树(parse tree). 这个过程中还会执行类型检查.
  2. 将parse tree 转换成object文件. 可以先转换成汇编文件, 然后机器码文件.

链接(link)

将obj文件link可执行文件. 检查目标文件中用到的变量与函数是否存在. 它们可以存在于单个或多个obj文件中, 也可存在于library文件, 如.so中.

当linker碰到一个声明时, 有两种情况, 对应两种处理:

  1. 如果之前已经解析过, 万事OK. (具体情况不了解)
  2. 如果没有解析过, 则在系统路径和用户提供的路径中寻找. 编译好的库文件有索引, 所以不用search整个文件, 只需要在索引中search就行. 找到后, 将定义所在的模块, 即整个obj文件而非整个库文件链接到可执行文件中.

需要注意的是:

  • 编译时一般会自动执行链接过程, 可以提供额外的include路径(具体是哪个参数TODO).
  • 标准库文件的路径,如iostream, 不用指定.
  • 最后还会为每个可执行文件加一个启动模块, 用于完成程序启动前的准备工作, 如内存空间分配等.

转载于:https://www.cnblogs.com/dengdan890730/p/6217341.html

你可能感兴趣的文章
软件公司书籍推荐——按角色划分
查看>>
剑指offer和leetcode都有的_反转链表
查看>>
chrome 插件地址 知乎
查看>>
javascript全局变量都是window对象的属性
查看>>
第八届蓝桥杯省赛第七题---日期问题
查看>>
iview树的修改某个节点,树刷新后自动展开你刚才展开的所有节点
查看>>
oracle服务起不来以及无法监听问题解决
查看>>
Mvc--Html.ActionLink()的用法
查看>>
delphi 基础书籍推荐
查看>>
《面向对象程序设计》2018年春学期寒假及博客作业总结
查看>>
iOS开发UI之KVC(取值/赋值) - KVO (观察某个对象的某个属性的改变)
查看>>
1.7 将一个MxN矩阵所有为0的元素所在行和列全部置0
查看>>
删除U盘时提示无法停止‘通用卷’设备的解决方法!!不要每次都硬拔了,对电脑有不小的损害!!!...
查看>>
Java中接口与接口和类之间的关系
查看>>
芯片TPS70925
查看>>
.net wordpress 服务器类
查看>>
MVC的一个简单实例
查看>>
python中的字符串格式化
查看>>
JVM平台上的响应式流(Reactive Streams)规范
查看>>
南阳理工57---6174问题
查看>>