动态链接与静态链接


前言

注:我的笔记风格,可能不会特别官方,不会晦涩难懂,而是以一个初学者能看懂的方式把知识呈现出来,用最简单的语言把抽象的概念表达出来~

动态链接与静态链接是链接器在链接阶段的两种方式,链接器是什么?链接阶段又是什么?

请往下看~


一、代码由源代码(.c)到可执行文件(.exe)的转化过程

代码由源代码(.c)到可执行文件(.exe)的转化过程,有以下几步:

  1. 预处理器在预处理阶段将源代码(.c)转化为预处理文件(.i)
  2. 编译器在编译阶段将预处理文件(.i)转化为汇编文件(.s
  3. 汇编器在汇编阶段将汇编文件(.s)转化为目标文件(.o)
  4. 链接器在链接阶段将目标文件(.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)的转化过程,并且介绍了动态链接和静态链接的定义和优缺点~

本系列为基础知识分享,日更,有任何问题可以私聊或评论博主哦!
希望给各位找工作和工作中的小伙伴提供一点微博的帮助,如果觉得有帮助,欢迎点赞评论收藏关注~

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值