DLL和LIB分析和总结.docxVIP

  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 和 LIB 什么事 dll 和 lib 文件 动态链接库(Dynamic Link Library,缩写为 DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。动态链接库文件的扩展名一般是 dll,也有可能是 drv、sys 和 fon,它和可执行文件(exe)非常类似,区别在于 DLL 中虽然包含了可执行代码却不能单独执行,而应由 Windows 应用程序直接或间接调用。 动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。换句话说,函数和过程的代码就在程序的 exe 文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。仅当应用程序被装入内存开始运行时,在 Windows 的管理下,才在应用程序与相应的 DLL 之间建立链接关系。当要执行所调用 DLL 中的函数时,根据链接产生的重定位信息,Windows 才转去执行 DLL 中相应的函数代码。 一般情况下,如果一个应用程序使用了动态链接库,Win32 系统保证内存中只有 DLL 的一份复制品,这是通过内存映射文件实现的。DLL 首先被调入 Win32 系统的全局堆栈,然后映射到调用这个DLL 的进程地址空间。在Win32 系统中,每个进程拥有自己的32 位线性地址空间,如果一个DLL 被多个进程调用,每个进程都会收到该DLL 的一份映像。与16 位 Windows 不同,在Win32 中 DLL 可以看作是每个进程自己的代码。 dll 和 lib 文件的区别和联系 .dll 是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll 还有其他的文件格式如.ocx 等,所有的.dll 文件都是可执行。 .lib 是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的 lib 文件在那里。一般来说,与动态连接文件相对比,lib 文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用 lib 文件,就必须: 包含一个对应的头文件告知编译器lib 文件里面的具体内容 设置 lib 文件允许编译器去查找已经编译好的二进制代码 如果你想从你的代码分离一个 dll 文件出来代替静态连接库,仍然需要一个 lib 文件。这个 lib 文件将被连接到程序告诉操作系统在运行的时候你想用到什么 dll 文件,一般情况下,lib 文件里有相应的 dll 文件的名字和一个指明 dll 输出函数入口的顺序表。如果不想用 lib 文件或者是没有 lib 文件,可以用 WIN32 API 函数 LoadLibrary、GetProcAddress。这就是问什么编译出 dll 后 VS 又给出了个 lib 文件的原因? lib 是编译时需要的,dll 是运行时需要的。如果要完成源代码的编译,有 lib 就够了。 如果也使动态连接的程序运行起来,有 dll 就够了。在开发和调试阶段,当然最好都有。 一般的动态库程序有 lib 文件和dll 文件。lib 文件是必须在编译期就连接到应用程序中的,而 dll 文件是运行期才会被调用的。如果有 dll 文件,那么对应的lib 文件一般是一些索引信息,具体的实现在dll 文件中。如果只有lib 文件,那么这个lib 文件是静态编译出来的,索引 和实现都在其中。静态编译的 lib 文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。 在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是 DLL 文件,引入库文件包含被 DLL 导出的函数的名称和位置, DLL 包含实际的函数和数据,应用程序使用 LIB 文件链接到所需要使用的 DLL 文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是 DLL 中所要调用的函数的内存地址,这样当一个或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,从而节省了内存资源。 /article/showarticle.asp?id=2923 一、前言 自从微软推出 16 位的 Windows 操作系统起,此后每种版本的 Windows 操作系统都非常依赖于动态链接库(DLL)中的函数和数据,实际上Windows 操作系统中几乎所有的内容都由 DLL 以一种或另外一种形

文档评论(0)

hao187 + 关注
官方认证
文档贡献者

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

认证主体武汉豪锦宏商务信息咨询服务有限公司
IP属地上海
统一社会信用代码/组织机构代码
91420100MA4F3KHG8Q

1亿VIP精品文档

相关文档