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

时间:2016-07-27 02:14:14

标签: dll shared-libraries static-libraries .lib

当我要为(SDLSimple DirectMediaLayer)设置开发环境时,我从readme.txt文件下载了网站提供的软件包,我发现我需要.lib和{ {1}} ...

我的问题是:

  1. 我不确定我的理解是否正确:在我看来,.dll .lib就像windows .a一样,是静态库linux的{​​{1}}与.dll的{​​{1}}类似,共享库,这是正确的吗?
  2. 如果上述想法是正确的,我认为我们只能使用windows.so,因为他们所做的工作是一样的吗?那么为什么还要在一个程序中同时获得两个
  3. 我不太明白linux,如果我的内存服务器是正确的,那么.lib的优点之一是它们可以在问题运行时更新,那么人们如何做到这一点,如果我们更新.dll文件,正在运行的程序怎样才能了解.dll的更改并将其重新加载到内存中?

1 个答案:

答案 0 :(得分:3)

在VC中,有两种库。

第一种类型是“真正的库”,由“静态库项目”生成,其中包含您可以链接和运行的所有内容,没有dll。

第二种类型是“导入库”,由“dll项目”生成,它只包含link.exe所需的符号。您可以链接到库,但需要运行dll。

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

加载dll时无法更改dll文件。

但是如果使用LoadLibrary加载dll,可以使用FreeLibrary卸载dll,更改dll,然后使用LoadLibrary加载新的dll。当然,您需要监视某些内容以调用此过程。

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