DLL与LIB文件的区别 
共有两种库:
一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library。
一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library。
共有两种链接方式:
动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息。
静态链接使用静态链接库,链接器从静态链接库LIB获取所有被引用函数,并将库同代码一起放到可执行文件中。
关于lib和dll的区别如下:reference group
(1)lib是编译时用到的,dll是运行时用到的。如果要完成源代码的编译,只需要 lib;如果要使动态链接的程序运行起来,只需要dll。
(2)如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容;如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行。
(3)动态链接的情况下,有两个文件:一个是LIB文件,一个是DLL文件。LIB包含被DLL导出的函数名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到DLL 文件。在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中相应函数代码的地址,从而节省了内存资源。DLL和LIB文件必须随应用程序一起发行,否则应用程序会产生错误。如果不想用lib文件或者没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress装载。
使用lib需注意两个文件:
(1).h头文件,包含 lib中说明输出的类或符号原型或数据结构。应用程序调用lib时,需要将该文件包含入应用程序的源文件中。
(2).LIB文件,略。
使用dll需注意三个文件:
(1).h头文件,包含dll中说明输出的类或符号原型或数据结构的.件。应用程序调用dll时,需要将该文件包含入应用程序的源文件中。
(2).LIB文件,是dll在编译、链接成功之后生成的文件,作用是当其他应用程序调用dll时,需要将该文件引入应用程序,否则产生错误。若是不想用lib文件或没有lib文件,能够用WIN32 API函数LoadLibrary、GetProcAddress装载。
(3).dll文件,真正的可执行文件,开发成功后的应用程序在发布时,只需要有.exe文件和.dll文件,并非需要.lib文件和.h头文件。
DLL与Lib的区别:
1. DLL是一个编译好的程序,调历时能够直接挪用其中的函数,不参加工程的编译
是一个程序集,只是把相应的函数总结在一路,若是挪用Lib的函数在工程编译时,这些函数也参加编译
dll和lib文件 
(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文件必需随应用程序一路发行,不然应用程序将会产生错误。
(4).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 ""
}
这是因为C语言写的lib文件没有C++所必需的名字破坏,C函数不能被重载,因此连接器会犯错。
在vs2020中编写dll如何生成lib文件 
vs2020默许生成dll,但不生成Lib文件,方式是:在所建工程上单击鼠标右键,在弹出的右键菜单当选择“添加-->新建项....---->模块概念文件”,在该模块概念文件中写导出函数表,单击确信。然后在所建工程上单击鼠标右键,选择“属性”菜单,在弹出的属性对话框中“链接器-->输入-->模块概念文件”中填写适才概念的def文件,然后再从头编译即可生成LIB文件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。