Visual Studio c++ 项目中所需的 DLL

The required DLLs in a visual studio c++ project

本文关键字:DLL Studio c++ 项目 Visual      更新时间:2023-10-16

我做了一些搜索,看到了与我性质相似的问题,但没有一个完全击中我所遇到的问题的一针见血。

我正在Visual Studio(使用Allegro 5库(中制作C++游戏,但在其他计算机上运行它时遇到了困难。我很清楚"此计算机缺少 MSVCR##.dll"问题,但我想知道的是为什么我无法运行我的发布版本,因为我在某台计算机上缺少 MSVCR##'D'.dll,当时我的印象是"D"后缀.dll是运行调试器时才需要的。我已经在配置管理器中签入了发布生成设置,并将"生成调试信息"设置为"否",我认为这是我唯一需要做的事情。我想我的问题是,我是否需要配置任何其他设置,以确保我的发布版本不会查找 MSVCR##D.dll。 提前感谢任何有任何信息的人!

您对 *D 库的使用有点困惑。它们确实用于调试版本,但调试版本在多个方面与发布版本不同。对于初学者,调试版本默认带有 *。包含所有函数名称的 PDB 文件(这是"生成调试信息"选项(。调试器查看 .PDB 文件以查找崩溃站点的可读名称。

另一个调试选项是不内联代码 - 这样可以保持命名函数不变。内联可能会将该单个 fint 放入其他三个函数中,这使调试变得有点复杂。

最后,调试 CRT 包括针对错误参数执行额外错误检查的函数。例如,许多函数在传递空指针时表现出未定义的行为。调试库将捕获其中的相当多,而发布版本假定您仅传递有效的指针。

现在DLL可以相互引用;有一个单一的依赖关系图。这就是依赖沃克工具存在的原因:它找出哪个DLL的rqeuire哪个其他DLL,这将告诉你为什么需要*D版本。

非常感谢您的所有投入,我能够从中学到很多东西。事实证明,这个问题(当然(完全是我的错,因为在项目设置中设置 Allegro 5 依赖项时(在 General->Linker 下(,我不小心包含了 Allegro 单体 md 调试版本的依赖项.dll以及我的发布版本中的非调试版本,并且该.dll反过来引用了 MSVCR .dll的 *D 版本。此问题已通过从我的游戏的发布版本中删除该依赖项得到解决。

在该计算机上安装依赖 walker。加载可执行文件。检查是否缺少任何依赖的 dll。