现在的位置: 首页 > 综合 > 正文

DLL动态库,LIB静态库

2014年09月14日 ⁄ 综合 ⁄ 共 1166字 ⁄ 字号 评论关闭

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 



抱歉!评论已关闭.