为啥有些程序需要 .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 才能工作的主要内容,如果未能解决你的问题,请参考以下文章