3

我阅读了本指南,该指南将引导您完成使用 Cairo 和 Visual C++ 创建“可视”应用程序所需的步骤。该指南建议您下载某些 dll 文件并将它们存储在创建可执行文件的目录中(调试)。以下是 Nil 在他的教程中引用的文件列表:

  • cairo 二进制文件(是的,你也需要二进制包,因为开发版不包含 DLL)-> libcairo-2.dll
  • zlib 二进制文件 -> zlib1.dll
  • libpng 二进制文件-> libpng12-0.dll
  • Freetype 二进制文件-> freetype6.dll
  • FontConfig 二进制文件 -> libfontconfig-1.dll
  • 外籍二进制文件-> libexpat-1.dll

正如你所看到的,它有很多文件。我一直想知道这是否是“正确”的做法?在这种情况下,是否有另一种被认为是“最佳实践”的方法?

4

1 回答 1

8

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

当然总有替代品!

静态链接

为避免您的应用程序必须存在一堆 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 从“源”文件夹(在源代码管理中)复制到我的输出文件夹中。

于 2013-04-17T16:04:52.023 回答