visual studio c ++项目中所需的DLL

时间:2016-02-16 02:32:14

标签: c++ debugging visual-studio-2012 dll settings

我已经做了一些搜索,并且看到了与我相似的问题,但是没有一个问题能够解决我遇到的问题。

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

3 个答案:

答案 0 :(得分:1)

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

另一个调试选项是不内联代码 - 这样可以保持命名函数的完整性。内联可以将单个结果放在其他三个函数中,这使得调试变得复杂。

最后,Debug CRT包含对坏参数执行额外错误检查的函数。例如,许多函数在传递空指针时会显示未定义的行为。 Debug库将捕获其中的一些,而Release版本假设您只传递有效的指针。

现在DLL可以互相引用;有一个whoel依赖图。这就是Dependency Walker工具存在的原因:它确定了哪个DLL的rqeuire是哪个其他DLL的,这将告诉你为什么需要* D版本。

答案 1 :(得分:1)

非常感谢您的所有投入,我能够从中学到很多东西。事实证明这个问题(当然)完全是我的错,就像在项目设置中设置Allegro 5依赖项时一样(在General-> Linker下)我偶然地包含了对Allegro monolith-md的调试版本的依赖性.dll以及我的Release版本中的非调试版本,而.dll又引用了MSVCR .dll的* D版本。通过从我的游戏的发布版本中删除该依赖项来解决该问题。

答案 2 :(得分:0)

在该计算机上安装依赖性walker。加载exe。检查是否缺少任何依赖dll。

相关问题