一、lib文件的简介
.lib是一种文件后缀,是Windows操作系统的库文件,有静态lib和动态lib之分:
1)、静态lib
文件:将导出的文件的声明和实现都放在lib文件中,此时lib
文件主要包含函数的实现部分(cpp文件)
,例如类的函数定义。使用时只需配
合相关的头文件,编译后程序将lib
文件中的代码嵌入到宿主程序中,也就是最后的exe文件中,此时移除lib
文件,程序可以正常运行,即编译后就不需要lib文件的支持了。
2)、动态lib文件:相当于是一个h头文件,用于支持相应的dll
文件的运行。里面存储的是dll文件中各个导出函数的地址,达到链接主程序与dll文件的目的。
dll文件的使用
dll文件的使用分为动态加载和静态加载,两种方法优势都很明显:
动态加载:
在程序中用程序显示加载dll文件,通过函数GetProcAddress找到对应的函数的地址,利用函数指针直接访问对应的函数。该方法不需要lib文件的支持,也不需要包含对应的头文件,但是需要显式的加载dll文件,这也就意味着dll文件在编译的时候就已经被链接,且使用不是很方便,函数指针容易出错。
静态加载
:只加载对应的lib文件(是一些函数链接的信息,一般比较小),不加载dll文件,编译的时候只需要lib文件的支持,在运行的时候才调用dll文件的函数。此处lib文件和dll文件都放在工程目录下,且需要包含对应的头文件。 Windows中dll、exe都是可执行的文件,但是exe可以直接被操作系统调用执行,而dll文件不能,因此当有进程调用dll文件中函数时,直接即可运行。
lib文件与dll
(1)lib是编译时需要的,
dll是运行时需要的。
如果要完成源代码
的编译,有lib就够了。
如果也使动态连接的程序运行起来,有dll就够了。
在开发和调试阶段,当然最好都有。
(2)一般的动态库程序有lib文件和dll文件。
lib文件是必须在编译期就连接到应用程序中的,
而dll文件是运行期才会被调用的。如果有dll
文件,那么对应的lib
文件一般是一些索引信息,具体的实现在
dll文件中。如果只有lib文件,那么这个lib文件是
静态编译出来的,索引和实现都在其中。静态编译的lib
文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致
应用程序比较大,而且失去了动态库的灵活性,在版本升级时,
同时要发布新的应用程序才行。
(3)
在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是
DLL文件,引入库文件包含被DLL导出的函数
的名称和位置,DLL包含实际的函数和数据,应用程序使用
LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到
可执行文件中,因此在应用程序的可执行文件中,存放的
不是被调用的函数代码,而是DLL
中所要调用的函数的
内存地址,这样当一个
或多个应用程序运行是再把程序代码和被调用的函数代码链接起来,
从而节省了
内存资源。从上面的说明可以看出,
DLL
文件必须随应用程序一起发行,否则
应用程序将会产生错误。