lib和dll文件的区别和联系

转载 2007年09月12日 23:19:00

lib和dll
lib和dll文件的区别和联系

.dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式,.dll还有其他的文件格式如.ocx等,所有的.dll文件都是可执行。

.lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须:
1 包含一个对应的头文件告知编译器lib文件里面的具体内容
2 设置lib文件允许编译器去查找已经编译好的二进制代码

如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress。事实上,我们可以在Visual C++ IDE中以二进制形式打开lib文件,大多情况下会看到ASCII码格式的C++函数或一些重载操作的函数名字。

一般我们最主要的关于lib文件的麻烦就是出现unresolved symble 这类错误,这就是lib文件连接错误或者没有包含.c、.cpp文件到工程里,关键是如果在C++工程里用了C语言写的lib文件,就必需要这样包含:
extern "C"
{
#include "myheader.h"
}
这是因为C语言写的lib文件没有C++所必须的名字破坏,C函数不能被重载,因此连接器会出错。

===============================

在VC中不用MFC如何制作dll

方法一:使用export 和 import

在VC中建立一个Console Application,建立2个文件:Dll.h 和 Dll.cpp

Dll.h

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

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文件

参考文献:

《Windows核心编程》

《凌波微步-软件开发警戒案例集》

 再补充一点:

dll是个编译好的程序,
调用时可以直接调用其中的函数,
不参加工程的编译.

而lib应该说是一个程序集,
只是把一些相应的函数总结在一起,
如果调用lib中的函数,
在工程编译时,这些调用的函数都将参加编译.

简单讲,静态库就是直接将需要的代码连接进可执行程序;动态库就是在需要调用其中的函数时,根据函数映射表找到该函数然后调入堆栈执行。
做成静态库可执行文件本身比较大,但不必附带动态库
做成动态库可执行文件本身比较小,但需要附带动态库
其它没有什么对于程序员而言很大的区别
有的Unix可能不支持动态库,所以只好用静态库

DLL与LIB的区别:
1.DLL是一个完整程序,其已经经过链接,即不存在同名引用,且有导出表,与导入表
lib是一个代码集(也叫函数集)他没有链接,所以lib有冗余,当两个lib相链接时地址会重新建立,当然还有其它相关的不同,用lib.exe就知道了
2.在生成dll时,经常会生成一个.lib(导入与导出),这个lib实际上不是真正的函数集,其每一个导出导入函数都是跳转指令,直接跳转到DLL中的位置,这个目的是外面的程序调用dll时自动跳转
3.实际上最常用的lib是由lib.exe把*.obj生成的lib,这才是真正的

关于Dll和lib的区别及作用

在学校的时候只是纯粹学习编程知识,并
  • jhgameboy
  • jhgameboy
  • 2014年04月14日 22:46
  • 6706

.h, lib和dll文件的功能和区别

简而言之 (1).h是头文件,lib和dll都是库文件。 (2)头文件包含声明,库文件则包含实现。 (3)lib是静态链接时使用的,如果采用静态链接库,则lib包含了实际执行代码和符号表等,无论...
  • chenwk891
  • chenwk891
  • 2013年10月25日 11:44
  • 1478

windows环境下lib和dll的区别和联系详细

c++中共有两种库: 1、LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。(这种方式...
  • ghevinn
  • ghevinn
  • 2015年02月12日 10:51
  • 14695

后缀名“.dll .obj .lib”和“ .so .o .a”文件的区别含义

(1) .dll .obj .lib使用在windows平台下。         .dll:动态链接库,作为共享函数库的可执行文件。         .obj:目标文件,相当于源代码对应的二进制文...
  • w616589292
  • w616589292
  • 2015年03月06日 17:43
  • 2018

LIB,DLL区别 及 VS中如何添加LIB,DLL

LIB和DLL文件在创建工程项目时是必须要面对的,下面的文章讲述了如何添加LIB和DLL文件以及两者的区别。原文: 原文  http://www.cnphp6.com/archives/64967 ...
  • gshgsh1228
  • gshgsh1228
  • 2016年08月07日 09:59
  • 2927

【好】C++中lib 和 dll 的区别、生成以及使用详解

文章转自:http://www.cnblogs.com/panweishadow/p/3632873.html  或者  http://www.cnblogs.com/TenosDoIt/p/3203...
  • WaitForFree
  • WaitForFree
  • 2016年04月03日 19:58
  • 4728

.h头文件 .lib库文件 .dll动态库文件之间的关系

.h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的。 附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件。如果要完成源代码的编译和链接,有头文件和lib就够...
  • yusiguyuan
  • yusiguyuan
  • 2013年10月12日 11:56
  • 16975

LIB和DLL的区别和使用

转载:http://www.cppblog.com/amazon/archive/2009/09/04/95318.html 共有两种库: 一种是LIB包含了函数所在的DLL文件和...
  • david412306524
  • david412306524
  • 2016年09月10日 11:08
  • 792

windows中静态库lib和动态dll的区别及使用方法

windows中静态库lib和动态dll的区别及使用方法网上有很多关于这方面的说明,但是比较乱,感觉都说不清楚的样子。根据自己的理解以及查询资料,有些内容参考于网络,做一下总结:1. 静态库lib和动...
  • dxzysk
  • dxzysk
  • 2017年03月26日 17:13
  • 1272

dll和lib区别联系

dll
  • leechow007
  • leechow007
  • 2017年08月11日 16:19
  • 75
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lib和dll文件的区别和联系
举报原因:
原因补充:

(最多只允许输入30个字)