使用Visual C ++ 2008在调试模式下找不到MSVCR90D.dll

时间:2008-10-20 15:05:23

标签: c++ visual-studio-2008 debugging winsxs msvcr90d.dll

我遇到了Visual C ++ 2008的问题。我已经安装了opencv,并且我已经创建了一个新程序,并且我构建它没有任何错误。但是,它抱怨在调试时没有找到MSVCR90D.dll。在发布模式下,完全没有问题。

我在其中一个Winsxs文件夹中有MSVCR90D.dll。有谁知道这个问题的解决方案?这是一个已知的错误?

杰拉德

11 个答案:

答案 0 :(得分:9)

forum post中描述了几种可能的解决方案。看看是否有任何帮助。

从那里得到一个提示:

  

转到%System Drive%\ Windows \ WinSxS   并寻找目录   x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456

     

如果不存在,请转到VS.   设置并确保你拥有所有   在VC ++下安装的库。

还有一个:

  

我有同样的问题,但修好了   通过关闭增量链接   (项目属性......链接器......   常规...启用增量链接:   否)。

确认最后一个:

  

基于软件安装的项目   开车抱怨失踪   MSVCR90D.dll。问题消失了   如果你关闭增量链接   (当然,重建一切)。

答案 1 :(得分:4)

遇到同样的问题我找到了一篇帖子,引导我进入VS9.0安装中的调试DLL。对于默认安装,他们位于:C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugCRT

有三个DLL和一个清单文件。您可以将这些目录添加到System32目录,将目录添加到PATH环境变量中,或者在调试时将文件复制到与可执行文件相同的目录中。

增量链接可加快构建速度(链接器仅重新链接已更改的库,而不是重新链接整个项目)。否则它对构建输出没有影响。对于大型项目,我不建议关闭增量链接。

答案 2 :(得分:3)

虽然另一个VC9.0项目表现不错,但是存在同样的问题。所以我比较了两个项目设置。 关键的区别在于“项目属性” - > '配置属性' - > '清单工具' - > '输入和输出' - > '嵌入清单'。此选项必须设置为YES。

答案 3 :(得分:2)

使用Dependency Walker可以轻松解决DLL问题。它允许您分析您的应用程序,捕获启动时加载的DLL和稍后加载的DLL。它将吐出大量与加载DLL相关的消息,或者无法加载它们。它还了解DLL的SxS加载。

您可以将EXE作为参数传递给Depends.EXE,它将分析该应用程序。这可以与大多数IDE结合使用。例如,在Visual Studio中,您可以设置“Command for Debugging”。默认情况下,这是您自己的EXE。将其更改为depends.EXE,并将命令参数设置为(至少)/pb your.debug.exe

答案 4 :(得分:1)

使用函数File-> New-> Project From Existing Code在VC ++ 2008中重新编译项目。 它帮助了我自己,可能它会帮助你。问候。

答案 5 :(得分:1)

我已经解决了如下问题:

  1. 选择项目,右键单击并打开属性页面。
  2. 选择配置属性。
  3. 从树列表中选择C / C ++。
  4. 选择代码生成。
  5. 查看左侧的属性列表,查看运行时库属性。
  6. 选择多线程调试,而不是选择关闭多线程DLL。
  7. 当你这样做时,你的项目嵌入了依赖的dll,因此它逃脱了依赖性问题。

    注意:我在一个dll项目上工作并遇到了这个问题。完成上述步骤后,它适用于我的情况。

答案 6 :(得分:0)

这是我静态链接的原因之一;更大的EXE,但我从来没有像这样的依赖问题。虽然可能值得一个问题......

答案 7 :(得分:0)

我无法给出明确的解决方案,但这里有一些有用的链接:

当然,如果您按照链接在MSDN上有更多内容。

答案 8 :(得分:0)

我遇到了问题:

无法加载文件或程序集'AudioInterface,Version = 1.0.3548.29920,Culture = neutral,PublicKeyToken = null'或其依赖项之一。此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。 (HRESULT异常:0x800736B1)

AudioInterface是我的C ++项目的名称。

切换到“发布”配置,一切正常。

我跟踪它缺少与我的DLL一起的清单文件,我进一步跟踪它有一个程序集标识集。 (属性>清单工具>常规>装配标识)

我删除了此设置,并且清单放在正确的位置,一切正常。

答案 9 :(得分:0)

我没有运气就尝试了所有建议的解决方案。我终于发现"C:\WINDOWS\WinSxS\Manifests"文件夹中缺少清单。

找到您的dll所在的C:\WINDOWS\WinSxS中的文件夹。检查C:\WINDOWS\WinSxS\Manifests中是否有与您的dll的文件夹名称匹配的清单。如果缺少清单,请从另一台计算机复制正确的清单并将其粘贴到清单文件夹中。清单文件名是:

  

“x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456.cat”

     

“x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456.manifest”

答案 10 :(得分:0)

我遇到了类似的问题,但所描述的解决方案都不适合我。

最后我做了以下事情来解决我的问题:

步骤 1: 按照@user176861 给出的建议

第 2 步: 在 VC++ 项目属性 -> 配置属性 -> 链接器 -> 清单文件中: 在“其他清单依赖项”中添加以下内容:

type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'

进行上述更改后,我可以调试了。