2014-03-05 110 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