2013-07-22 37 views
3

我在vs2010上有一個mfc C++項目。 我能夠在調試&發佈模式下構建它,但是當我在調試模式下運行它時,它會給出後續mfc100d.dll錯誤。我還安裝了C++運行環境vcredist_x86.exe,問題仍然沒有解決。我還設置了多線程DLL(/ MD)作爲運行時庫。 我該如何解決它?VS2010中的MFC100d.dll問題

enter image description here

回答

0

重新安裝Microsoft SDK修復此錯誤。

5

d後綴的DLL的名字表明它是一個調試版本的運行時DLL的。這一點由您說當您嘗試運行該應用程序的調試版本時發生問題的事實得到證實。

默認情況下,由於很好的原因,調試版本將鏈接到運行時庫的調試版本。這些版本是而不是可再發行組件,因此未通過可再發行組件包(vcredist_x86.exe)進行安裝。這通常不是問題:您不應該發佈應用程序的調試版本。

但是,不可再分發的調試庫隨Visual Studio一起安裝,因此您的應用的調試版本應該在您用來開發和構建它的計算機上運行良好。這可能是您要用來調試它的同一臺計算機。

此外,我已將多線程DLL(/ MD)設置爲運行時庫。需要注意這個

三個重要的事情:

  1. 你必須確保你將它設置爲正確的編譯配置(即「調試」)。

  2. 這不推薦。應用程序的調試版本應使用運行時庫的調試版本。他們在幕後做了很多事情來幫助你發現錯誤。這就是他們存在的原因。如果您不想依賴運行時庫的調試版本,請編譯和分發應用程序的發佈版本。

  3. 該開關更改您的應用程序鏈接到的運行時庫的版本C/C++。您收到錯誤消息的DLL是一個MFC運行時庫。

    MFC頭文件測試是否定義了_DEBUG預處理器符號以確定應該鏈接運行時庫的哪個版本。由於_DEBUG是在調試版本中自動定義的,因此它將在MFC庫的調試版本中進行鏈接。

    要改變這種情況,您需要做大量的人工操作,在包含MFC頭文件之前先定義這個符號,然後再重新定義它。

    或者,您可以靜態鏈接到MFC,這是項目屬性中的設置。但要小心:最終會無意中混入CRT版本,這會讓您處於一個受到傷害的世界。最好只發布發佈版本並保留內部調試的調試版本。

+0

其實我不是那個開發這個項目的人。它被分配給我解決一些問題。顯然它不是我的機器上開發的。那麼我有沒有辦法在我的機器上調試這個項目? – foobar

+0

@smilepleeeaz安裝Visual Studio。你打算如何調試呢? –

+0

我正在使用Visual Studio 2010,這就是問題在調試它的地方。 – foobar