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

Posted

技术标签:

【中文标题】为啥有些程序需要 .lib 和 .dll 才能工作【英文标题】:Why some programs require both .lib and .dll to work为什么有些程序需要 .lib 和 .dll 才能工作 【发布时间】:2016-07-27 02:14:14 【问题描述】:

当我准备为(SDLSimple DirectMediaLayer)搭建开发环境时,我下载了网站提供的包,从readme.txt文件中发现我需要.lib.dll...

我的问题是:

    我不确定我的理解是否正确:在我看来,.lib 代表 windows 就像 .a 代表 linux,是 静态库.dll 代表windows 就像 .so 对应 linux,是共享库,对吗? 如果上面的想法是正确的,我想我们只能使用.lib.dll,因为他们所做的工作是一样的?那么,为什么还要在一个程序中同时获得两个? 而且我不太了解.dll,如果我的记忆对我来说是正确的,shared library 的优势之一是它们可以在程序运行时更新,那么如果我们更新,人们怎么能做到这一点.dll 文件,正在运行的程序如何知道.dll 的变化并将其重新加载到内存中?

【问题讨论】:

【参考方案1】:

在 VC 中,有两种库。

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

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

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

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

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

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

【讨论】:

以上是关于为啥有些程序需要 .lib 和 .dll 才能工作的主要内容,如果未能解决你的问题,请参考以下文章

DLL 和 LIB 文件 - 啥以及为啥?

opencv中自带的dll和lib 为啥不能直接使用?

为啥类库 (dll) 也不生成 lib 文件?

java开发中 为啥有些包放在lib文件夹中就行 而有些包要配置到classpath环境变量中去?

为啥 C# 需要注册 COM DLL 才能引用它?

为啥 React 需要 Babel 和 Webpack 才能工作?