动态链接库的工作原理

How Dynamic-link library works

本文关键字:工作 动态链接库      更新时间:2023-10-16

我在想:当我用Visual Studio (c++)生成DLL时,它生成

  • .dll文件
  • .lib文件

还有一个。h文件

那么,为什么不直接开发一个静态的。lib库呢?
例如,为什么Office没有.lib文件?

并且,在将来,如果我更改DLL,我是否必须将新的。lib文件和。h文件发送到所有的机器?

.h和.lib仅供开发人员使用。无论谁编写程序来使用DLL。

那些只执行应用程序的人只需要. dll。

所以如果你发布了一个新版本,你将DLL发送给用户,并将三元组发送给开发人员。除非您更改了公共接口(导出),否则旧客户端将很乐意使用更新后的DLL,而无需任何工作。

如果你构建一个静态的.lib,每个客户端必须重新构建他的二进制文件。

.lib文件和头文件是动态库的静态部分。
您需要.lib和头文件来编译和链接程序,以便它使用您的库。

那么为什么不使用静态库呢?
原因有很多。一种情况是,如果使用静态库,每次更改库都会导致程序重新编译。另一个是程序的规模将会增加。还有更多。

所以对于第二个问题,lib文件对于程序的用户来说是无用的。在办公室。如果你没有源代码和编译器,那么lib文件是没有用的。

对于你的最后一个问题。答案也很简单。不,您不需要分发.lib文件。只要接口保持不变,就可以用新版本替换dll文件。

这是一个简短的版本,试图回答你的具体问题。"DLL和共享库是如何工作的"这个主题有好几页长,我不打算把它全部写下来作为答案。

从编译器生成的部分开始,一个。lib和一个。dll文件,使用如下:。lib文件包含使用。dll进入。exe文件的"存根",并包含在。dll文件中"在哪里可以找到不同的函数"。因此,这仅在构建.exe文件时使用。类似地,.h文件在编译.dll和.exe文件时使用,一旦有了组成产品的最终二进制文件(.exe和.dll文件)就不会使用。

当有多个可执行文件使用相同的. DLL文件时,使用DLL的目的比静态链接更重要。如果一个DLL只有一个"用户",那么好处就会减少,但仍然有一些好处(比如分隔,只对那部分代码提供更新的能力,插件等)。

假设你的。dll是一个只包含二进制文件的程序的一部分,没有源代码,那么你只需要分发新的。dll[只要函数没有改变,使用这个。dll的。exe或其他。dll必须改变,当然]。