lib和dll文件的区别和联系

5 篇文章 0 订阅
(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和.LIB文件必须随应用程序一起发行,否则应用程序将会产生错误。
一、开发和使用dll需注意三种文件
1、 dll头文件
它是指dll中说明输出的类或符号原型或数据结构的.h文件。当其它应用程序调用dll时,需要将该文件包含入应用程序的源文件中。
2、 dll的引入库文件
它是dll在编译、链接成功后生成的文件。主要作用是当其它应用程序调用dll时,需要将该文件引入应用程序。否则,dll无法引入。
3、 dll文件(.dll)
它是应用程序调用dll运行时,真正的可执行文件。dll应用在编译、链接成功后,.dll文件即存在。开发成功后的应用程序在发布时,只需要有.exe文件和.dll文件,不必有.lib文件和dll头文件。
动态链接库 (DLL) 是作为共享函数库的可执行文件。动态链接提供了一种方法,使进程可以调用不属于其可执行代码的函数。函数的可执行代码位于一个 DLL 中,该 DLL 包含一个或多个已被编译、链接并与使用它们的进程分开存储的函数。DLL 还有助于共享数据和资源。多个应用程序可同时访问内存中单个 DLL 副本的内容。

动态链接与静态链接的不同之处在于:动态链接允许可执行模块(.dll 文件或 .exe 文件)仅包含在运行时定位 DLL 函数的可执行代码所需的信息。在静态链接中,链接器从静态链接库获取所有被引用的函数,并将库同代码一起放到可执行文件中。  


在VC中不用MFC如何制作dll 

方法一:使用export 和 import   
在VC中建立一个Console Application,建立2个文件:Dll.h 和 Dll.cpp  

 
Dll.h   

#ifdef   MYLIBAPI   
#else   
#define   MYLIBAPI   extern "C "  _declspec(dllimport)   
#endif   

MYLIBAPI   int Add(int iLeft, int iRight)   
MYLIBAPI   int Sub(int iLeft, int iRight)   


Dll.cpp   

#define   MYLIBAPI   extern "C " _declspec(dllexport)   
#include  "Dll.h"   

int Add(int iLeft, int iRight)   
{   
    return iLeft + iRight;   
}   

int Sub(int iLeft, int iRight)   
{   
    return iLeft - iRight;   
}   

保存文件。   
在Project-> setting-> link   最下面加上   “/dll”,   "/ "之前一定要与前一项   
有空格。   
然后编译,就可以在debug 或 release下面找到dll   和   lib   文件了   
使用的时候包含dll.h文件   


方法二:使用def文件   
建立一个console  application, 建立2个文件dll.h 和 dll.cpp   

Dll.h   

int Add(int iLeft, int iRight);   
int Sub(int iLeft, int iRight);   


Dll.cpp   

#include   "Dll.h "   

int Add(int   iLeft,   int   iRight)   
{   
    return  iLeft + iRight   ;   
}   

int Sub(int iLeft, int iRight)   
{   
    return  iLeft - iRight   ;   
}   

然后再当前目录下面建立一个.def文件,文件名最好和要输出的dll名字一样,扩展名   为.def,   里面写上:   

LIBRARY   dllname.dll   
EXPORTS   
Add   @1   
Add   @2   
然后将这个文件添加到工程中,   
在link中设置   /dll,   然后编译   
在debug或release中就可以找到dll和lib了   
使用的时候加上dll.h文件

转载地址:

http://www.cnblogs.com/devilmsg/articles/1266336.html

http://blog.163.com/huan_xiaoy/blog/static/136186476201062210348277/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值