一、几种文件的作用
h头文件作用:声明函数接口
dll动态链接库作用:含有函数的可执行代码
lib库有两种:
(1)静态链接库(Static Libary,以下简称“静态库”)
(2)动态连接库(DLL,以下简称“动态库”)的导入库(Import Libary,以下简称“导入库”)
两者的区别:
实质是不一样的东西。
静态库本身就包含了实际执行代码、符号表等等,而对于导入库而言,其实际的执行代码位于动态库中,导入库只包含了地址符号表等,确保程序找到对应函数的一些基本地址信息。
如:当我们在自己的程序中引用了一个h头文件里的函数,链接器怎么知道该调用哪个DLL文件呢?
这就是导入库文件的作用:告诉链接器调用的函数在哪个DLL中,函数执行代码在DLL中的什么位置。这也就是为什么需要在工程属性的“附加依赖项”中填入.LIB文件,它起到桥梁的作用。如果生成静态库文件,则没有DLL ,只有lib,这时函数可执行代码部分也在lib文件中。
二、dll文件的链接方式
dll有两种加载方式:隐式链接和显式链接。
dll一般会有对应的导入库,方便程序进行隐式链接加载,否则就需要自己LoadLibary调入DLL文件,然后再GetProcAddress获得对应函数了(即显示链接加载dll方式)。有了导入库,你只需要链接导入库后按照头文件函数接口的声明调用函数就可以了。
即:隐式链接方式需要导入库,而显式链接方式可以不需要。
三、用处区别
.h头文件是编译时必须的,lib库是链接时需要的,dll动态链接库是运行时需要的。
若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够了。如果也使动态连接的程序运行起来,有dll就够了。在开发和调试阶段,当然最好都有。
综上所述: .h和lib文件是编译器,比如VS2012,在编译的时候调用的,而dll是生成的可执行的文件,比如.exe文件,运行的时候需要调用的。