我在使用 Visual C++ 2008 时遇到问题。我已经安装了 opencv,并且创建了一个新程序,并且我构建它时没有出现任何错误。但是,它抱怨调试时找不到 MSVCR90D.dll。在发布模式下完全没有问题。
我确实在 Winsxs 文件夹之一中有 MSVCR90D.dll。有谁知道解决这个问题?这是一个已知的错误?
杰拉德
我在使用 Visual C++ 2008 时遇到问题。我已经安装了 opencv,并且创建了一个新程序,并且我构建它时没有出现任何错误。但是,它抱怨调试时找不到 MSVCR90D.dll。在发布模式下完全没有问题。
我确实在 Winsxs 文件夹之一中有 MSVCR90D.dll。有谁知道解决这个问题?这是一个已知的错误?
杰拉德
此论坛帖子中描述了几种潜在的解决方案。看看这些是否有帮助。
来自那里的一个提示:
转到 %System Drive%\Windows\WinSxS 并查找目录 x86_Microsoft.VC90.DebugCRT_1fc8b3b9a1e18e3b_9.0.21022.8_x-ww_597c3456
如果这不存在,请转到 VS 设置并确保您已在 VC++ 下安装了所有库。
还有一个:
我遇到了同样的问题,但通过关闭增量链接来修复它(项目属性...链接器...常规...启用增量链接:否)。
确认最后一个:
在安装了软件的驱动器上构建的项目抱怨缺少 MSVCR90D.dll。如果您关闭增量链接(当然要全部重建),问题就会消失。
遇到同样的问题,我发现一篇文章引导我在 VS9.0 安装中调试 DLL。对于默认安装,它们位于:C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugCRT
.
有三个 DLL 和一个清单文件。您可以将这些添加到您的System32
目录,将目录添加到您的PATH
环境变量或在调试时将文件复制到与可执行文件相同的目录。
增量链接加快了您的构建(链接器仅重新链接已更改的库,而不是重新链接整个项目)。否则它对构建输出没有影响。对于大型项目,我不建议关闭增量链接。
有同样的问题,虽然另一个 VC9.0 项目做得很好。所以我比较了两个项目设置。关键的区别在于“项目属性”->“配置属性”->“清单工具”->“输入和输出”->“嵌入清单”。此选项必须设置为 YES。
使用 Dependency Walker 解决 DLL 问题要容易得多。它允许您分析您的应用程序,捕获启动时加载的 DLL 和稍后加载的 DLL。它会吐出很多与DLL加载或加载失败有关的消息。它还理解 DLL 的 SxS 加载。
您可以将 EXE 作为参数传递给 Depends.EXE,它将分析该应用程序。这可以与大多数 IDE 结合使用。例如,在 Visual Studio 中,您可以设置“调试命令”。默认情况下,这是您自己的 EXE。将其更改为depends.EXE,并将命令参数设置为(至少)/pb your.debug.exe
。
使用函数 File->New->Project From Existing Code 在 VC++ 2008 中重新编译您的项目。它帮助了我自己,也许它会帮助你。问候。
我已经解决了同样的问题,如下所示:
当你这样做时,你的项目嵌入了依赖的 dll,因此它避免了依赖问题。
注意:我在一个 dll 项目上工作并遇到了这个问题。完成上述步骤后,它适用于我的情况。
我尝试了所有建议的解决方案,但没有任何运气。我终于发现该"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”
这是我静态链接的原因之一;更大的 EXE,但我以前从未遇到过这样的依赖问题。可能本身就值得一个问题......
我遇到了问题:
无法加载文件或程序集“AudioInterface,Version=1.0.3548.29920,Culture=neutral,PublicKeyToken=null”或其依赖项之一。此应用程序无法启动,因为应用程序配置不正确。重新安装应用程序可能会解决此问题。(来自 HRESULT 的异常:0x800736B1)
AudioInterface 是我的 C++ 项目的名称。
切换到“发布”配置,一切正常。
我跟踪到它在我的 DLL 旁边缺少清单文件,我进一步跟踪到有一个程序集标识集。(属性 > 清单工具 > 常规 > 装配标识)
我删除了这个设置,清单放在正确的位置,一切正常。
我无法给出明确的解决方案,但这里有一些有用的链接:
当然,如果您点击链接,MSDN 上还有更多内容。
我遇到了类似的问题,但所描述的解决方案都不适合我。
最后我做了以下来解决我的问题:
Step-1:按照@user176861给出的建议
步骤2:在VC++项目属性->配置属性->链接器->清单文件中:在“附加清单依赖项”中添加以下内容:
type='win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='x86' publicKeyToken='1fc8b3b9a1e18e3b'
进行上述更改后,我能够调试。