繁体   English   中英

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

[英]The required DLLs in a visual studio c++ project

我进行了一些搜索,发现了本质上与我相似的问题,但是没有一个问题触及到我所遇到的问题的头上。

我正在Visual Studio(带有Allegro 5库)中制作C ++游戏,遇到在其他计算机上运行该游戏的困难。 我很清楚“此计算机缺少MSVCR ##。dll”问题,但我想知道的是为什么由于缺少MSVCR ## D而无法运行Release版本某台计算机上的.dll令我印象深刻的是,运行调试器仅需要后缀'D'的.dll。 我已经在配置管理器中签入了发行版本设置,并且“ Generate Debug Info”设置为“ No”,我认为这是我唯一需要做的事情。 我想问的问题是,是否需要配置其他任何设置,以确保我的Release版本不在寻找MSVCR ## D.dll。 预先感谢任何有任何信息的人!

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

另一个调试选项是不内联代码-这样可以使命名函数保持完整。 内联可能会将单个函数放在其他三个函数中,这使调试有些复杂。

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

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

非常感谢您的所有投入,我从中可以学到很多。 事实证明,问题出在(当然)完全是我的错,因为在项目设置中(在General-> Linker下)设置Allegro 5依赖项时,我不小心包括了Allegro monolith-md调试版本的依赖项。 dll以及我的Release版本中的非调试版本,而该.dll依次引用了MSVCR .dll的* D版本。 通过从我的游戏的“发布”版本中删除该依赖性,已解决了该问题。

在该机器上安装依赖项walker。 加载exe。 检查是否缺少任何相关的dll。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM