MFC中lib和dll的区别

MFC中lib和dll的区别

lib文件,也会导出函数符号,如果工程要使用该lib中的函数,只需包含lib的头文件,以及包含该库,在程序连接的时候,会将lib库中的代码加入到你的exe之类的目标代码中,所以一般生成的目标文件较大,好处是,你换了一台机器,仍能执行。
在MFC中,这种方式一般叫做静态库 
 
dll,会导出函数符号。你所建立的工程可以使用dll中的函数,但是,目标代码中不包含该dll的代码(dll作为一个单独的线程,由程序加载到内存LoadLibrary(L"XXXX.DLL");),在exe执行到函数符号的时候,你必须先用GetProcAddress("");取得该函数的内存地址,然后执行。这种方式称为动态库,可以背exe的多个实例共享。所以,很多温软的官方接口都是以dll的形式给出的。
比如,user32.dll
缺点是,移植性不好,一般的话,你发release版本的时候,必须把你的dll一起发行,如果该文件丢失,基本你的应用也就跑不起来。
所以,你知道lib是用来干嘛的吧?
.lib就是用来支持编译的,,,,
不能单独被执行而dll ,         可以被LoadLibrary(L"XXX.DLL");加载到内存执行。入口就是DLLMAIN或者dllentry之类的入口函数

一般的动态库程序有lib文件和dll文件。lib文件是必须在编译期就连接到应用程序中的,而dll文件是运行期才会被调用的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。静态编译的lib文件有好处:给用户安装时就不需要再挂动态库了。但也有缺点,就是导致应用程序比较大,而且失去了动态库的灵活性,在版本升级时,同时要发布新的应用程序才行。

    .dll是在你的程序运行的时候才连接的文件,因此它是一种比较小的可执行文件格式所有的.dll文件都是可执行。 .lib是在你的程序编译连接的时候就连接的文件,因此你必须告知编译器连接的lib文件在那里。一般来说,与动态连接文件相对比,lib文件也被称为是静态连接库。当你把代码编译成这几种格式的文件时,在以后他们就不可能再被更改。如果你想使用lib文件,就必须: 1 包含一个对应的头文件告知编译器lib文件里面的具体内容 2 设置lib文件允许编译器去查找已经编译好的二进制代码如果你想从你的代码分离一个dll文件出来代替静态连接库,仍然需要一个lib文件。这个lib文件将被连接到程序告诉操作系统在运行的时候你想用到什么dll文件,一般情况下,lib文件里有相应的dll文件的名字和一个指明dll输出函数入口的顺序表。如果不想用lib文件或者是没有lib文件,可以用WIN32 API函数LoadLibrary、GetProcAddress等函数来调用.dll中的函数,比起有lib文件时调用.dll中的函数稍微麻烦些。

原文地址:https://www.cnblogs.com/htys/p/3435801.html