前言
注:我的笔记风格,可能不会特别官方,不会晦涩难懂,而是以一个初学者能看懂的方式把知识呈现出来,用最简单的语言把抽象的概念表达出来~
动态链接与静态链接是链接器在链接阶段的两种方式,链接器是什么?链接阶段又是什么?
请往下看~
一、代码由源代码(.c)到可执行文件(.exe)的转化过程
代码由源代码(.c)到可执行文件(.exe)的转化过程,有以下几步:
- 预处理器在预处理阶段将源代码(.c)转化为预处理文件(.i)
- 编译器在编译阶段将预处理文件(.i)转化为汇编文件(.s)
- 汇编器在汇编阶段将汇编文件(.s)转化为目标文件(.o)
- 链接器在链接阶段将目标文件(.o)转化为可执行程序(.exe)
过程如图所示:
这里借用了知乎大佬的图,链接为:https://zhuanlan.zhihu.com/p/106781089
二、动态链接与静态链接
知道了上面的过程,那么链接就很好理解了,主要分为两种:
1.静态链接
静态链接:链接器在链接阶段将各种库文件和相关文件集成到可执行文件中,在windows下静态链接库以.lib结尾,linux下以.a结尾
静态链接的优点:
1)装载速度很快,运行速度比动态链接快;
2)只需要开发人员在开发机上有完整的.lib文件,不需要在用户机器上有完整的.lib文件,自完备
静态链接的缺点:
1)可执行文件很大,并且相同代码很多,资源浪费
2.动态链接
动态链接:动态链接是把链接过程在运行时进行,动态链接在可执行文件装载或运行的时候,由操作系统的装载程序加载库文件,windows下以.dll结尾,也有.lib的,但是这个是叫做导入库,和静态链接的不一样,linux下以.so结尾
动态链接的优点:
1)可执行文件很小;
2)适合大规模软件开发,开发过程耦合度小、独立,便于不同开发人员和开发组织开发;
3)不同编程语言按照约定可以使用同一套.dll库;
4)dll文件与exe文件独立,如果输出接口相同,更换dll文件不会对exe文件产生影响,可拓展性和可维护性好
动态链接的缺点:
1)速度没有静态链接快;
2)不具有自完备,如果用户机器中没有.dll文件,程序将无法运行并且报错
总结
简单的介绍了一下代码由源代码(.c)到可执行文件(.exe)的转化过程,并且介绍了动态链接和静态链接的定义和优缺点~
本系列为基础知识分享,日更,有任何问题可以私聊或评论博主哦!
希望给各位找工作和工作中的小伙伴提供一点微博的帮助,如果觉得有帮助,欢迎点赞评论收藏关注~