静态链接库与动态链接库相对应。动态链接库的导入库不同于以上两种库。
1.静态链接库(lib)
程序编译一般需经编辑、编译、连接、加载和运行几个步骤。在我们的应用中,有一些公共代码是需要反复使用,就把这些代码编译为“库”文件(lib),
这种LIB中有函数的实现代码。在静态编译时,它是将LIB中的代码加入目标模块(EXE或者DLL)文件中,所以链接好了之后,LIB文件就没有用了。
2.动态链接库(dll)
动态链接库(Dynamic Link Library,缩写为DLL)是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的例程和资源。
动态链接库文件的扩展名一般是dll,也有可能是drv、sys和fon,它和可执行文件(exe)非常类似,区别在于DLL中虽然包含了可执行代码却不能单独执行,
而应由Windows应用程序直接或间接调用。
动态链接是相对于静态链接而言的。所谓静态链接是指把要调用的函数或者过程链接到可执行文件中,成为可执行文件的一部分。
换句话说,函数和过程的代码就在程序的exe文件中,该文件包含了运行时所需的全部代码。当多个程序都调用相同函数时,内存中就会存在这个函数的多个拷贝,
这样就浪费了宝贵的内存资源。而动态链接所调用的函数代码并没有被拷贝到应用程序的可执行文件中去,而是仅仅在其中加入了所调用函数的描述信息(往往是一些重定位信息)。
仅当应用程序被装入内存开始运行时,在Windows的管理下,才在应用程序与相应的DLL之间建立链接关系。当要执行所调用DLL中的函数时,
根据链接产生的重定位信息,Windows才转去执行DLL中相应的函数代码。
3.动态链接库的导入库(lib)
目前以lib后缀的库有两种,一种为静态链接库(Static Library,以下简称“静态库”),另一种为动态连接库(DLL,以下简称“动态库”)的导入库(Import Library,以下简称“导入库”)。
静态库上面有介绍,不再重复。
动态库一般会有对应的导入库,方便程序静态载入动态链接库,否则你可能就需要自己LoadLibrary调入DLL文件,然后再手工GetProcAddress获得对应函数了。
有了导入库,你只需要链接导入库后按照头文件函数接口的声明调用函数就可以了。
当DLL被链接时,链接程序要查找关于输出变量,函数,或C++类的信息,并自动生成一个lib文件。该lib文件包含一个DLL输出的符号列表。
当可执行文件生成之后,lib文件就没什么用了,但是dll文件必须存在。