[C/C++] LIB和DLL的区别与联系
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了[C/C++] LIB和DLL的区别与联系,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1682字,纯文字阅读大概需要3分钟。
内容图文
![[C/C++] LIB和DLL的区别与联系](/upload/InfoBanner/zyjiaocheng/622/d44170ae136f49dca3908948f86494b9.jpg)
在讲解.h .lib .dll的关系时,回顾一下C/C++从源文件到.exe的过程:
上图可以帮助我们理解C/C++的构建过程,当你有了一些开发经验之后,你会遇到.lib .dll两种文件,很容易把人绕晕,结合上图,总结一下为什么要使用.lib和.dll,以及他们的区别.
实际上,假如我们引用了在其他文件实现的函数,那么在我们执行链接之前,函数的入口地址我们是不知道的,C/C++的编译器给我们留了很多”坑”,链接这一过程就是”填坑”的过程。
Lib
Lib仅在编译时用到,分为两种库,static link library(静态库)和dynamic link library(动态库)
- static link library :静态库实际上是一堆.obj的集合,它本身就包含函数的入口地址以及函数的实现代码,通过静态链接和其他的.obj可以生成.exe文件,这样的生成方式会使得 .exe文件过大(静态库只包含一个.lib文件)
- dynamic link library : 动态库该包含了函数在哪个DLL文件的信息和文件中函数的入口地址,函数实现代码由运行时加载在进程空间中的DLL提供(动态库包含.lib和.dll文件)
其实看到的这里的dynamic link library,很多人可能会打呼这不就是DLL吗,你把DLL和LIB混为一谈,是大错特错了!
其实不然,Lib仅在链接时起作用,一旦链接完毕它的使命就结束了,我们常说的.dll文件,仅在运行期加载。
DLL
以.dll为后缀的文件包含了代码的实现,且仅在运行时调用,在Windwos系统下它也有两种实现方式
- load time dynamic linking : 模块非常明确调用某个导出函数,使得他们就像本地函数一样.这需要链接时链接那些函数所在DLL的导入库,导入库向系统提供了载入DLL时所需的信息及DLL函数定位.
- run time dynamic linking : 行时可以通过LoadLibrary或LoadLibraryEx函数载入DLL.DLL载入后,模块可以通过调用GetProcAddress获取DLL函数的出口地址,然后就可以通过返回的函数指针调用DLL函数了.如此即可避免导入库文件了
Lib和Dll的使用
如果我们仅使用静态库,那么可以在配置的链接器属性中引入.h和.lib即可,或是使用#pragma comment(lib, "libname.lib")
。
如果使用动态库,那么在配置时必须引入.h .lib .dll(例如配置OpenGL的时候)
内容总结
以上是互联网集市为您收集整理的[C/C++] LIB和DLL的区别与联系全部内容,希望文章能够帮你解决[C/C++] LIB和DLL的区别与联系所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。