如何将 .dll 库与 C++ VS 项目链接?

Posted

技术标签:

【中文标题】如何将 .dll 库与 C++ VS 项目链接?【英文标题】:How to link .dll library with the C++ VS project? 【发布时间】: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 文件链接到您的项目中。 【参考方案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 文件布局的说明,请参阅 here; this link 有一个 .def 文件的示例

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

【讨论】:

另一种选择是使用LoadLibrary 和GetProcAddress 动态调用DLL 函数而不链接到它。 是的,它看起来像是我也可以使用的解决方案。谢谢。

以上是关于如何将 .dll 库与 C++ VS 项目链接?的主要内容,如果未能解决你的问题,请参考以下文章

如何用VS2010编写动态链接库DLL

在 VC++(VS2010) 项目输出中包含 DLL

如何将 vs2008 c++ OpenCV dll 构建到 vs2008 C#?

Visual Studio C++ 项目找不到.dll

C++类封装成DLL动态链接库

C++ / VS 2012 - 多项目解决方案:一个项目中的链接器错误但另一个项目中没有