我应该在哪里包含库中 bin 文件夹中的 .dll 文件?

Posted

技术标签:

【中文标题】我应该在哪里包含库中 bin 文件夹中的 .dll 文件?【英文标题】:Where should I include .dll files from bin folder in libraries? 【发布时间】:2020-04-15 03:36:22 【问题描述】:

要使用 C++ 库,我们需要从 bin 文件夹中复制 .dll 文件,我们被指示将它们粘贴到 project directoryC:/windows32/ 中。

除了可访问性范围之外,我们将.dll 文件粘贴到何处是否重要?

【问题讨论】:

不要乱用%SYSTEMROOT% 中的文件,尤其是不要覆盖现有的系统文件,如果你有其他选择的话。 @Davislor 是的,但为什么呢?我想知道您的建议背后发生了什么,并将其写为答案 【参考方案1】:

如果您有其他选择,将文件写入系统目录是一个非常糟糕的主意。 (如果你确实需要,你会检查环境变量而不是硬编码。)

充其量,没有其他程序会安装同名的库,因此您的系统目录中会有一些额外的垃圾。卸载程序时无法将其删除,因为它从未注册过,而且您无法知道其他应用程序是否需要它。

在最坏的情况下,两个不同的程序会安装不同版本的FOO.DLL,其中一个会崩溃。这被亲切地称为“DLL Hell”,解决方案是每个人都将他们的 DLL 放在项目目录中。 (或者有时,供应商的公用文件。)

【讨论】:

如果 DLL 是标准的(例如官方 driectX dll),那么可以将它们放在系统根目录中还是期望它们?然后设计我们的应用程序,如果它需要相同 DLL 的修改版本或具有相似名称的 DLL,则应用程序首先查找它自己的资源目录。 在这种情况下,您可以在安装过程中运行可再发行 DirectX 安装程序。它被编程为检测是否已经安装了较新的版本。 绝对不要用可能较旧的文件覆盖系统目录中已经存在的文件。

以上是关于我应该在哪里包含库中 bin 文件夹中的 .dll 文件?的主要内容,如果未能解决你的问题,请参考以下文章

在哪里存储外部 DLL 文件?

arcgis dll文件一般在哪里?

C标准库中的函数定义在哪里?

文件无效或损坏无法在0x379处读取

从 Subversion 存储库中删除特定文件?

fltk 1.3 库中的 graph.h 在哪里?