为什么有些程序需要 .lib 和 .dll 才能工作

zha*_*min 5 dll shared-libraries static-libraries .lib

当我要建立我的开发环境(SDLSimple DirectMediaLayer),我下载了由该网站提供的包,从readme.txt文件中我发现,我既需要.lib.dll...

我的问题是:

  1. 我不确定我的理解是否正确:在我看来,.libforwindows就像.afor linux,是静态库,而.dllforwindows就像.sofor linux,是共享库,这是正确的吗?
  2. 如果上面的想法是正确的,我认为我们只能使用.lib.dll,因为它们所做的工作是相同的?那么为什么要在一个程序中同时获得两个呢?
  3. 而且我不太明白.dll,如果我的内存服务我是对的,好处之一shared library是它们可以在程序运行时更新,那么人们怎么能这样做,如果我们更新.dll文件,正在运行的程序怎么能得到知道的变化.dll并将其重新加载到内存中?

neo*_*ope 6

在 VC 中,有两种库。

第一种是“真正的库”,由“静态库项目”生成,里面包含了所有可以链接和运行的东西,没有dll。

第二种是“导入库”,由“dll工程”生成,只包含link.exe需要的符号。您可以链接到该库,但您需要运行 dll。

有两种方法可以使用 dll。链接到“导入库”或“使用 LoadLibrary API”。

加载 dll 时不能更改 dll 文件。

但是如果你使用LoadLibrary加载dll,你可以使用FreeLibrary卸载dll,更改dll,然后使用LoadLibrary加载新的dll。当然,您需要监视一些东西来调用这个过程。

更简单的方法是,使用加载程序进行更新,然后加载真正的 exe。