调试版本无法找到调试运行时DLL

时间:2014-03-05 22:58:12

标签: c++ visual-studio-2008 dll side-by-side

我有一个Visual Studio 2008(SP1)程序,调试版本,32位,似乎无法找到调试运行时DLL(多线程调试DLL)。

但疯狂的是,depends.exe显示必需的DLL存在(也缺少)。它实际上看起来像是试图加载这些DLL两次。

以下是来自depends.exe的屏幕截图的链接,显示我正在谈论的内容 - 分析作为解决方案一部分的库。

当我启动程序时,我得到“程序无法启动,因为您的计算机缺少MSVCP90D.dll。请尝试重新安装该程序以解决此问题。”

如果我进入sxs目录并将“缺失的”DLL复制到与二进制文件相同的目录中,程序就会运行。

应用程序清单指定了正确的DLL版本(由depends.exe找到它们证明)。我检查了那个版本的运行时的清单,对于我未经训练的眼睛,它看起来是合法的。

二进制文件本身显示的问题与链接图像中检查的DLL相同,但也缺少(但仍然存在)MSVCP90D.DLL。

我尝试使用内部/外部清单进行构建,关闭和打开增量链接,正如其他地方所建议的那样,都无济于事。我会尝试链接一个非DLL运行时,但是我使用的库是在几十个解决方案中共享的,所以改变它们的构建方式实际上并不是一个选项(当然,除非结果是唯一的解决方案)一个已知的问题,我的谷歌搜索没有出现)。

我尝试过运行sxstrace,但大部分时间输出为空(!),当它不为空时它没有显示错误。

我尝试使用windbg,但由于我对该工具不是特别熟悉而且不确定我在寻找什么,因此无处可去。

我在64位Windows 7上运行。我早期的一个想法是,我的盒子上安装了VS2005,2008和2010,这引起了一些奇怪的问题,但我没有发现支持这种假设的证据。

(PS。看起来像msvcp90d.dll is missing msvcr90d.dll类似的问题,据我所知,实际上并没有得到解决,并且还提到了C# - 我的项目是纯C ++)。

PPS。看起来与"application configuration is incorrect" and "side-by-side configuration is incorrect" running VS2008 64-bit debug build类似的问题 但是,该问题与第三方库和64位版本有关。

此外,将“丢失的”DLL从SxS手动复制到bin目录的“解决方案”(如上所述,这就是技巧)根本不是解决方案 - 充其量只是一种解决方法。

2 个答案:

答案 0 :(得分:4)

redisributable不包含调试DLL文件。您需要安装Visual Studio才能获取它们。

答案 1 :(得分:1)

“应用程序的调试版本不可再发行,并且各种Visual C ++动态链接库(DLL)的调试版本都不可再发行。应用程序和Visual C ++库的调试版本只能部署到另一台计算机内部到您的开发站点,仅用于在未安装Visual C ++ 2005的计算机上调试和测试您的应用程序。“

这是msdn关于运行调试版本“准备运行调试可执行文件的测试机器”的主题(提供了解决方案和示例):

http://msdn.microsoft.com/en-us/library/aa985618(v=vs.90).aspx

您可以选择您的Visual Studio版本(从2005年到2013年)。