2016-08-23 65 views
2

我正在使用VS2008創建我的應用程序的調試版本。 編譯後,當我嘗試運行該應用程序時,出現着名的'MSVCR90.dll is missing'錯誤。C++應用程序(調試版本)包含VS運行時庫msvcr90.dll和msvcr90d.dll

起初,我試圖將MSVCR90.DLL從winsxs文件夾複製到應用程序文件夾,但我得到另一個著名的錯誤「應用程序已作出了嘗試加載錯誤的C運行時庫」

最後我試着檢查應用程序的依賴關係,它揭示了一些奇怪的東西。有兩個MSVCR90庫作爲應用程序的依賴關係 - msvcr90d.dll和msvcr90.dll。我不是這個庫的非調試版本如何進入我的應用程序。

我可能做錯了什麼。提前致謝。

這裏有一個畫面:

image

dependency walker - no functions visible

+0

你可以使用的Dependency Walker,看看有什麼功能您的應用程序從進口'msvcr90.dll' – Ari0nhh

+2

猜測:您正在使用以發佈模式構建的外部庫。 –

+1

_I試圖將MSVCR90.dll從winsxs文件夾複製到應用程序文件夾中 - 不要這樣做 - 通常只使用安裝程序安裝運行時是一個更好的主意。 _有兩個MSVCR90庫作爲應用程序的依賴關係 - msvcr90d.dll和msvcr90.dll_ - 某人(您或者靜態庫)已經構建了一些針對運行時版本的東西。您需要瀏覽每個圖書館和項目才能找到它。沒有足夠的細節來診斷運行時不匹配的來源。 – Niall

回答

3

我找到了答案!

我用/VERBOSE:LIB鏈接器標誌,以找出鏈接的部分增加了MSVCR90.DLL(釋放)庫爲我的應用程序。

後來使用的/NODEFAULTLIB:MSVCRT.lib鏈接器標誌到庫/ exe文件的,以避免庫MSVCRT.LIB(發佈)版本,在鏈接過程中執行「無衝突」。這將避免在可執行文件/庫中使用MSVCRT的庫引用的兩個版本。

注意:如果你想避免在您的應用程序MSVCRT的調試版本,那麼你可以使用/NODEFAULTLIB:MSVCRTD.lib

相關問題