在哪里放置和如何包含dll文件在c++项目
Where to place and how to include dll files in c++ project?
我阅读了这篇指南,它引导您完成使用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从"源"文件夹(在源代码控制中)复制到我的输出文件夹中。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 在C++中查找文件
- c++库的公共头文件中应该包含什么
- 用c++从输入文件中读取另一行
- Cppcheck生成xml转储文件
- 读取文件的最后一行并输入到链接列表时出错
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 如何将内容数组写入文本文件?
- C++ Windows 驱动程序MSB3030无法复制该文件,因为它找不到