2014-03-05 75 views
1

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

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

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

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

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

应用程序清单指定了正确的DLL版本(由depend.exe找到它们证明)。我已经检查过该版本的运行时间的清单,并且对于我未经训练的眼睛来说它看起来合法。

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

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

我试过运行sxstrace,但是大多数时候输出是空的(!),当它不是空的时候它不显示错误。

我试过使用windbg,但没有得到任何好处,因为我对该工具没有特别的经验,也不确定我在找什么。

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

(PS貌似相似的问题,因为这msvcp90d.dll is missing msvcr90d.dll据我可以看到实际上并没有得到解决,而且还提到了C# - 我的项目是纯C++)。

+0

您是否在运行该程序的计算机上运行该程序?您安装VS2005,2008和2010的顺序是什么? – cup

+0

是,在一台机器上构建并运行。按照时间顺序安装。 – Rodyland

回答

3

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

+0

这是从insi运行的de Visual Studio。 – Rodyland

+0

流程启动器会抱怨它无法加载A,但它可以找到A但A的依赖项缺失。在你的情况下,它可以找到MSVCP90D.dll但不是MSVCR90D.dll。也许这个链接将有助于http://stackoverflow.com/questions/218747/msvcr90d-dll-not-found-in-debug-mode-with-visual-c-2008 –

+0

如果你愿意看看我包括的截图,您可以看到MSVCR90D.DLL和MSVCP90D.DLL都找到了。与黄色未找到版本相比,灰色线显示“重复”发现版本。 – Rodyland

1

“应用程序的调试版本不可再分发,各种Visual C++动态链接库(DLL)的调试版本都不可再分发。应用程序和Visual C++库的调试版本只能部署到另一台计算机上内部到您的开发网站的唯一目的是在没有安装Visual C++ 2005的计算机上调试和测试您的应用程序。“

这里是关于乳宁调试版本MSDN上的主题是‘准备测试机器上运行一个调试可执行文件’(提供解决方案和示例):

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

你可以选择你的视觉版本工作室(从2005年到2013年)

+0

我正在Visual Studio调试器中运行该程序。我可以在调试模式下构建并运行其他visual studio程序,而不会出现问题。 – Rodyland