编译过程的理解

今天心血来潮突然看了一下编译过程中的具体细节,做了如下总结:
首先解释一下编译过程中涉及到的一些文件:
.h,.cpp:
源码文件,用于编译器解析
.obj
编译后的代码和数据,并且有名称,所以在编译过程中会遇到有外部符号未解决的问题。经过查阅资料发现和.exe文件一样,都是二进制文件
并且编译过程中每个.cpp文件都会生成一个.obj文件。理论上link过程中可以用obj链接其他工程,但实际上我们都用的lib文件
.lib .dll
静态链接库:编译时候就需要。函数的索引和实现都在一个文件中。
动态链接库:运行的时候才需要。由.lib文件和.dll文件一起使用(这里的lib文件只是起到一个函数索引的作用,在程序link的时候,
将dll的入口链接导入到exe中,将函数的地址和函数名导入到exe中,具体的函数体在dll中,运行时候在寻址找函数体)。用动态链接库方式要比静态库方式节省很多内存资源。在升级的时候需要将lib和dll文件一起打包升级。

编译过程:
1.预编译
	去掉注释
	替换宏
	递归展开头文件,并且将每个头文件插入到cpp文件中,形成一个大的cpp文件(大的cpp文件使用在编译的时候)
	处理预编译指令(#)
	预编译过程中不做任何有效信息的类型检查
	
2.编译
	词法优化,语法优化,代码优化,形成obj文件(binary file,在linux中是.o文件)
	内联函数的替换就发生在这一阶段
3.链接
	将各个模块生成的obj文件link到一起
4.exe
	最终生成exe文件

欢迎各位大佬指点纠正,以及补充,技术无罪技术无界限哈哈哈哈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值