静态链接库和动态链接库异同点.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
静态链接库和动态链接库异同点

先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库和动态链接库的另外一个区别在于静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库。 目标库(Object Libraries) 目标库又叫静态链接库,是扩展名为.LIB的文件,包括了用户程序要用到的各种函数。它在用户程序进行链接时,“静态链接”到可执行程序文件当中。例如,在VC++中最常使用到的C运行时目标库文件就是LIBC.LIB。在链接应用程序时常使用所谓“静态链接”的方法,即将各个目标文件(.obj)、运行时函数库(.lib)以及已编译的资源文件(.res)链接到一起,形成一个可执行文件(.exe)。使用静态链接时,可执行文件需要使用的各种函数和资源都已包含到文件中。这样做的缺点是对于多个程序都使用的相同函数和资源要重复链接到exe文件中,使程序变大、占用内存增加。 动态链接库(Dynamic-Link Libraries) “动态链接”是将一些公用的函数或资源组织成动态链接库文件(.dll),当某个需要使用dll中的函数或资源的程序启动时(准确的说是初始化时),系统将该dll映射到调用进程的虚拟地址空间、增加该dll的引用计数值,然后当实际使用到该dll时操作系统就将该dll载入内存;如果使用该dll的所有程序都已结束,则系统将该库从内存中移除。使用同一dll的各个进程在运行时共享dll的代码,但是对于dll中的数据则各有一份拷贝(当然也有在dll中共享数据的方法)。 动态链接库中可以定义两种函数:输出函数和内部函数。输出函数可以被其他模块调用,内部函数只能被动态链接库本身调用。动态链接库也可以输出数据,但这些数据通常只被它自己的函数所使用。 静态链接库与动态链接库的相同点: 1、共享代码; 2、代码封装; 静态链接库与动态链接库的区别: 1、静态链接库被包含在宿主程序中,而动态链接库则是在需要时动态地装载和卸载DLL文件; 2、静态链接库中不能再包含其它动态或者静态链接库,而动态链接库中则可再包含。 在VC中动态链接库如下分类: Visual C++支持三种DLL,它们分别是Non-MFC DLL(非MFC动态库)、MFC Regular DLL(MFC规则DLL)、MFC Extension DLL(MFC扩展DLL)。 1、非MFC动态库不采用MFC类库结构,其导出函数为标准的C接口,能被非MFC或MFC编写的应用程序所调用; 2、MFC规则DLL 包含一个继承自CWinApp的类,但其无消息循环; 3、MFC扩展DLL采用MFC的动态链接版本创建,它只能被用MFC类库所编写的应用程序所调用。 在大型的应用软件中,会常常使用到动态链接库技术。举个例子,假如我们要写一个大型的应用软件,其中包括了多个程序。我们可以发现很多程序可能都会使用到一些同样的通用的函数。我们可以把这些通用的函数放到某个目标库文件中(.LIB),然后在链接是把它加到每个程序中进行静态链接。但是这是一种非常浪费的方法,因为每个程序模块中都会包括这些通用函数的独立拷贝。另外,如果我们要改变库文件中的某个函数,就必须把所有使用到这个函数的程序都重新编译一遍。但是,如果我们使用动态链接库的技术,把所有这些通用函数都放到一个动态链接库文件当中,我们就可以解决以上提到的各种问题。首先,动态链接库在硬盘上只保留一个拷贝,程序只是在运行时才会调用其中使用到的函数,这样我们就可以节省大量的程序存储和运行空间。其次,如果要修改某个通用函数时,只要调用接口没有改变,只是改变它的实现方法,那么我们就不必对每个用到它的程序都进行重新编译,而只要把动态链接库模块重新编译一遍就可以了。 动态链接库模块也可以作为一个单独的产品来发布。这样程序开发人员就可以使用第三方的模块来开发自己的应用程序,提高了程序的复用程序,也节省了大量的时间和精力。 目标库和导入库都是在程序开发过程中才使用到的,而动态链接库是在程序运行时才使用的。在程序运行时,相应的动态链接库文件必须已经保存在硬盘上了。另外,如果要使用动态链接库文件,该文件必须要保存在同.EXE文件同一个目录下,或者保存在当前目录、Windows系统目录、Windows目录或环境变量中PATH参数

文档评论(0)

xxj1658888 + 关注
实名认证
文档贡献者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档