在哪里放置以及如何在 c++ 项目中包含 dll 文件?
Posted
技术标签:
【中文标题】在哪里放置以及如何在 c++ 项目中包含 dll 文件?【英文标题】:Where to place and how to include dll files in c++ project? 【发布时间】:2013-04-17 15:52:46 【问题描述】:我阅读了这个guide,它将引导您完成使用 Cairo 和 Visual C++ 创建“可视”应用程序所需的步骤。该指南建议您下载某些 dll 文件并将它们存储在创建可执行文件的目录中(调试)。 以下是 Nil 在他的教程中引用的文件列表:
cairo 二进制文件(是的,你也需要二进制包,因为开发版不包含 DLL)-> libcairo-2.dll zlib 二进制文件 -> zlib1.dll libpng 二进制文件 -> libpng12-0.dll Freetype 二进制文件 -> freetype6.dll FontConfig 二进制文件 -> libfontconfig-1.dll expat 二进制文件 -> libexpat-1.dll如您所见,文件非常多。我一直想知道这是否是“正确”的做法?在这种情况下,是否有另一种被认为是“最佳实践”的方法?
【问题讨论】:
该指南正确地指出 DLL 应与使用它们的应用程序放在同一目录中。它们不是系统 DLL,不属于/windows
或 /windows/systemXX
【参考方案1】:
这种方法没有任何问题,它可能是让您的应用程序启动并运行的最快方法。您的应用程序需要这些库,因此将它们放在同一个文件夹中可以找到它们。
当然总是有替代品!
静态链接
为避免您的应用程序必须存在大量 dll,您可以使用静态链接。您在链接时链接 .lib 文件,而不是在运行时链接到 .dll 文件。使您的 .exe 更大,但意味着您可以分发单个文件。
将 Dll 放在不同的文件夹中
dll 不必与 .exe 位于同一文件夹中,尽管这通常是最有意义的。 Windows 在运行时查找 .dll 时会搜索多个文件夹,因此您可以将 dll 放在当前目录、系统目录(绝对不推荐)或 PATH
环境变量中的另一个目录中。其实这些地方都不推荐!将它们与 .exe 放在同一个文件夹中是最安全的,因为通常您可以控制该文件夹。
此处概述了 Windows 如何搜索 .dll 的具体规则:http://msdn.microsoft.com/en-ca/library/windows/desktop/ms682586(v=vs.85).aspx
自定义构建步骤
我不喜欢手动将文件放入我的调试或发布文件夹。我喜欢将调试文件夹视为我可以随时删除和重建的东西,并且我喜欢有一个一步构建过程,将所有内容放在需要的位置,以便我可以轻松地在任何机器上构建。因此,我通常会创建一个自定义构建步骤,将所需的 .dll 从“源”文件夹(在源代码管理中)复制到我的输出文件夹中。
【讨论】:
以上是关于在哪里放置以及如何在 c++ 项目中包含 dll 文件?的主要内容,如果未能解决你的问题,请参考以下文章