我在想:当我使用Visual Studio(C ++)生成DLL时,它会生成
我有一个.h文件
那么,为什么不直接开发静态.lib库?
例如,为什么Office没有.lib文件?
而且,将来,如果我更改DLL,我是否还必须向所有机器发送新的.lib文件和.h文件?
答案 0 :(得分:4)
.h和.lib仅适用于开发人员。 写程序以使用DLL的人。
刚刚执行应用程序的人只需要.DLL。
因此,如果您发布新版本,则将DLL发送给用户,将三元组发送给开发人员。除非您更改了公共接口(导出),否则旧客户端将乐意使用更新的DLL而无需任何工作。
如果您构建静态.lib,则每个客户端都必须重建其二进制文件。
答案 1 :(得分:3)
.lib文件和头文件是动态库的静态部分 您需要.lib和头文件才能编译和链接程序,以便它使用您的库。
那么为什么不使用静态库呢? 原因有很多。一个是如果您使用静态库,库的每次更改都会导致重新编译您的程序。另一个是程序的大小会增加。还有一些。
因此,对于您的第二个问题,lib文件对于您的程序用户来说是无用的。在办公室的情况下。只要你没有源代码和编译器,lib文件就无济于事。
关于你的上一个问题。答案也很简单。不,您不需要分发.lib文件。只要界面保持不变,您就可以用新版本替换dll文件。
答案 2 :(得分:2)
这是一个SHORT版本,试图回答您的具体问题。 “DLL和共享库如何工作”的主题是相当长的几页,我只是不打算将其全部作为答案。
从编译器生成的部分开始,使用.lib和.dll文件,如下所示:.lib文件包含使用.dll进入.exe文件的“存根”,并包含“where to to在.dll文件中找到不同的函数。所以这仅在构建.exe文件时使用。类似地,.h文件在编译.dll和.exe文件时使用,并且在您拥有构成产品的最终二进制文件(.exe和.dll文件)后不会使用.h文件。
当有多个可执行文件使用相同的.dll文件时,使用DLL而不是静态链接的目的是最重要的。如果只有一个DLL的“用户”,那么好处会减少,但仍然有一些好处(例如分隔,只能为代码的那一部分提供更新的能力,插件等)。
假设你的.dll是一个只包含二进制文件,没有源代码的程序的一部分,那么你只需要分发新的.dll [只要函数没有以.exe或者这样的方式改变)。其他.dll使用这个.dll必须改变,当然]。