【问题标题】:Why does MSVC need an import library (.lib) for a .dll when MinGW doesn't?为什么 MSVC 需要 .dll 的导入库 (.lib) 而 MinGW 不需要?
【发布时间】:2016-02-15 07:27:22
【问题描述】:

我有点困惑,为什么我使用的第 3 方 .dll 带有一个标记为“导入库”的 .lib 文件。当我运行程序时,我只需将 .dll 放在与可执行文件相同的目录中,它就可以工作了。我正在使用 MinGW。

如果我什至不需要它,有人可以解释为什么 .dll 带有一个 .lib 导入库吗?如果我确实将它与 MinGW 一起使用,我将如何使用它?我应该把它放在哪里?

我阅读了它,看起来 MinGW(我正在使用的)不需要 .lib 文件,而 MSVC 需要 文件。这是为什么呢?

附:如果我想将 .dll 放在包含可执行文件的目录以外的目录中,我可以在 .pro 文件中放置一行以指向它吗?

谢谢。

【问题讨论】:

标签: c++ qt


【解决方案1】:

根据http://www.mingw.org/wiki/sampleDLL,MinGW 可以从对应的.h 文件和 DLL 本身中猜出 .lib(DLL 名称、导出条目的名称和 ABI)中包含的信息。

根据http://www.mingw.org/wiki/CreateImportLibraries,这适用于“使用 MinGW 创建的所有 DLL 以及其他一些 DLL”。

如果它无法正确猜测,您仍然需要提供.lib 文件。后一个链接说明了如果您没有原始链接,如何手动生成。

前一个链接参考ld 文档以获得更深入的描述。具体来说,它位于ld and WIN32 (cygwin/mingw) 节点,“直接链接到 dll” 部分。除其他外,它概述了需要 .lib 的情况:

  • 直到最近,直接链接还不能用于导出的数据条目
  • 如果.lib 包含纯静态对象(例如cygwinX.dll
  • 如果导出的条目不符合修改规则(例如 Win32 库)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    相关资源
    最近更新 更多