17

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

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

杰拉德

4

11 回答 11

9

此论坛帖子中描述了几种潜在的解决方案。看看这些是否有帮助。

来自那里的一个提示:

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

如果这不存在,请转到 VS 设置并确保您已在 VC++ 下安装了所有库。

还有一个:

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

确认最后一个:

在安装了软件的驱动器上构建的项目抱怨缺少 MSVCR90D.dll。如果您关闭增量链接(当然要全部重建),问题就会消失。

于 2008-10-20T15:16:52.917 回答
5

遇到同样的问题,我发现一篇文章引导我在 VS9.0 安装中调试 DLL。对于默认安装,它们位于:C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugCRT.

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

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

于 2009-03-29T02:13:29.770 回答
3

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

于 2010-01-13T16:18:31.300 回答
2

使用 Dependency Walker 解决 DLL 问题要容易得多。它允许您分析您的应用程序,捕获启动时加载的 DLL 和稍后加载的 DLL。它会吐出很多与DLL加载或加载失败有关的消息。它还理解 DLL 的 SxS 加载。

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

于 2008-10-21T09:05:02.170 回答
1

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

于 2010-07-11T08:09:57.837 回答
1

我已经解决了同样的问题,如下所示:

  1. 选择项目,右键单击并打开属性页。
  2. 选择配置属性。
  3. 从树列表中选择 C/C++。
  4. 选择代码生成。
  5. 查看左侧的属性列表并查看运行时库属性。
  6. 选择多线程调试,而不是关闭多线程 DLL。

当你这样做时,你的项目嵌入了依赖的 dll,因此它避免了依赖问题。

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

于 2014-08-05T06:47:26.830 回答
0

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

C:\WINDOWS\WinSxS找到您的 dll 所在的文件夹。检查是否有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”

于 2010-07-01T13:00:11.733 回答
0

这是我静态链接的原因之一;更大的 EXE,但我以前从未遇到过这样的依赖问题。可能本身就值得一个问题......

于 2008-10-20T15:22:31.580 回答
0

我遇到了问题:

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

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

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

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

我删除了这个设置,清单放在正确的位置,一切正常。

于 2009-09-22T00:03:33.270 回答
0

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

当然,如果您点击链接,MSDN 上还有更多内容。

于 2009-07-19T18:29:59.247 回答
0

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

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

Step-1:按照@user176861给出的建议

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

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

进行上述更改后,我能够调试。

于 2021-03-02T13:01:45.197 回答