1,是什么
动态链接库英文为DLL,是Dynamic Link Library 的缩写形式,DLL是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件。
静态链接库就是你使用的.lib文件,库中的代码最后需要连接到你的可执行文件中去,所以静态连接的可执行文件一般比较大一些。
2,为什么
(A)动态链接库优点:
1、扩展了应用程序的特性;
2、可以用许多种编程语言来编写;
3、简化了软件项目的管理;
4、有助于节省内存;
5、有助于资源共享;
6、有助于应用程序的本地化;
7、有助于解决平台差异;
8、可以用于一些特殊的目的。windows使得某些特性只能为DLL所用。
(B)静态链接库优点:
1、性能上有一定的提高:exe模块调用动态链接库的导出函数时,需要先加载动态链接库,有一定的性能损失;
2、静态链接可以避免运行程序的系统缺少动态库而无法运行的情况
(C)DLL、LIB的区别:
1、存放内容:
<a> 如果只有lib文件,那么这个lib文件是静态编译出来的,包含函数的索引信息(函数入口、地址等)和函数的具体实现。
<b> 动态链接的情况下有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名和地址,DLL包含实际的函数实现,应用程序使用LIB文件链接到DLL文件。
2、编译方式:
<a> lib的处理是在编译阶段进行的,编译器在编译时将调用者使用到的代码嵌入到调用者代码当中,与调用代码一起编译,一起在私有地址空间中分配内存。使用静态编译的lib文件,在运行程序时不需要再挂lib库,所以导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。
<b> dll的实际处理是在运行阶段进行的,编译器在编译阶段只在调用者的调用处做一个连接标记,待程序运行时再将dll装入到进程的共享地址空间中。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32
API函数LoadLibrary、GetProcAddress装载。
3、调用方式:
<a> lib库在源代码中加入 #pragma comment(lib, "libname.lib")
具体见:http://blog.csdn.net/haojiahuo50401/article/details/7101725
<b> dll库在win32程序中调用函数 LoadLibrary("DLLnamee.dll")
和 FreeLibrary()
具体见: http://blog.csdn.net/haojiahuo50401/article/details/7101787