在哪里放置和如何包含dll文件在c++项目

Where to place and how to include dll files in c++ project?

本文关键字:文件 c++ 项目 dll 何包含 在哪里      更新时间:2023-10-16

我阅读了这篇指南,它引导您完成使用Cairo和visual c++创建"可视化"应用程序所需的步骤。指南建议您下载某些dll文件并将它们存储在创建可执行文件的目录中(debug)。以下是Nil在教程中引用的文件列表:

  • cairo Binaries(是的,您也需要二进制包,因为Dev包不包含DLL) -> libcairo-2.dll
  • zlib二进制文件-> zlib1.dll
  • libpng二进制文件-> libpng12 .dll
  • Freetype binary -> freetype6.dll
  • FontConfig -> libfontconfig-1.dll
  • expat binary -> libxpat -1.dll

如您所见,这是相当多的文件。我一直在想,这样做是否"正确"?在这种情况下,是否存在被认为是"最佳实践"的替代方法?

这种方法没有任何问题,而且它可能是启动并运行应用程序的最快方法。您的应用程序需要这些库,因此将它们放在同一个文件夹中可以让它找到它们。

当然总是有选择的!

静态链接

为了避免在应用程序中存在一堆dll,可以使用静态链接。在链接时链接.lib文件,而不是在运行时链接到.dll文件。使您的。exe更大,但意味着您可能能够分发单个文件。

将dll放到另一个文件夹

dll不必与.exe在同一个文件夹中,尽管这通常是最有意义的。在运行时查找.dll时,Windows将搜索多个文件夹,因此您可以将dll放在当前目录、系统目录(绝对不推荐)或PATH环境变量中的另一个目录中。实际上这些地方都不推荐!将它们放在与.exe相同的文件夹中是最安全的,因为通常您可以控制该文件夹。

Windows搜索.dll的具体规则如下:http://msdn.microsoft.com/en-ca/library/windows/desktop/ms682586(v=vs.85).aspx

自定义构建步骤

我不喜欢手动把文件放在我的调试或发布文件夹。我喜欢把调试文件夹想象成可以随时删除和重新构建的东西,我喜欢有一个一步构建过程,将所有东西放在需要的地方,这样我就可以轻松地在任何机器上进行构建。因此,我通常会创建一个自定义构建步骤,将所需的.dll从"源"文件夹(在源代码控制中)复制到我的输出文件夹中。