【问题标题】:How to link .dll library with the C++ VS project?如何将 .dll 库与 C++ VS 项目链接?
【发布时间】:2014-06-10 08:42:52
【问题描述】:

我想在我的 C++ 项目中将现有库(仅 .dll,而不是 .lib)与相应的头文件一起使用。我更改了这些设置:Project > Config. Settings > C/C++ > General > Additional Include Directories > Path\to\my\DLL,但似乎这不是正确的方法。我还尝试更改一些链接器设置。我使用新的 Visual Studio Express。 谢谢。

【问题讨论】:

  • 您不需要在构建(编译和链接)期间链接它。这就是 DLL 背后的全部想法。它是一个动态链接库,这意味着它在运行时链接到您的可执行映像。只需确保 DLL 与您的可执行文件一起存在即可。
  • 我明白...但是当我只包含头文件时,编译会中止并显示以下消息:未解析的外部符号。我认为因为只有函数声明而不是定义(?)
  • 啊……您仍然需要将 lib 文件链接到您的项目中。

标签: c++ visual-studio dll


【解决方案1】:

您需要对与 DLL 对应的 .lib 文件的引用。 Lib 文件基本上是一组允许链接器解析依赖关系的符号。它有点代替链接器的 DLL。

【讨论】:

  • 只有.dll和头文件。我尝试使用这个库:http://ufal.mff.cuni.cz/morphodita/.
  • 看起来您可能必须自己构建它。见ufal.mff.cuni.cz/morphodita/install#toc2
  • 我真的必须自己编译并生成.lib 文件吗?这对我来说听起来很可怕(在 Windows 下 :)
  • 嗯,应该不会太糟糕。你有海合会吗?说明在那里。尽管您可能可以要求构建 Windows DLL 的人将其提供给您。它应该在他们构建 DLL 时生成。
  • 我用 mingw32-make 制作了 .lib。非常感谢。
【解决方案2】:

根据this MSDN article(它很旧,但步骤应该仍然有效),您需要

a) 使用 DUMPBIN /EXPORTS <.dll> 获取 .DLL 的导出符号列表 [您应该能够从 Visual Studio 命令提示符运行 DumpBin]

b) 创建一个 .DEF 文件,其中包含一个带有函数名称的 EXPORTS 部分;有关 .def 文件布局的说明,请参阅 herethis link 有一个 .def 文件的示例

c) 使用 LIB /DEF:<.def> 生成 .lib 文件

【讨论】:

  • 另一种选择是使用LoadLibraryGetProcAddress 动态调用DLL 函数而不链接到它。
  • 是的,它看起来像是我也可以使用的解决方案。谢谢。
猜你喜欢
  • 2014-12-19
  • 2017-10-06
  • 1970-01-01
  • 2011-04-29
  • 2020-02-16
  • 1970-01-01
  • 2021-08-06
  • 1970-01-01
  • 2017-11-25
相关资源
最近更新 更多