2008-11-16 103 views
12

我知道這樣的問題已經被問到,但情況有點不同,所有關於該問題的答案都不適用於我。MSVCR90.DLL找不到

我想在VS2008中編譯一些C代碼,它不會創建一個EXE文件。此外,當我嘗試使用F5運行它,我得到:

此應用程序未能啓動 因爲MSVCR90.DLL沒有找到。

我做了一些Google搜索,它說這是因爲我的C++可再發行組件包未安裝。所以我安裝了它,重啓了所有的東西並再次嘗試。但是,唉,我仍然有同樣的錯誤。有沒有人有任何線索如何解決這個問題?

+0

將您的項目簡化爲最簡單的形式(例如'hello world')併發布代碼,makefile,構建日誌以及其他任何其他內容,我們可以爲您提供幫助。否則,你在黑暗中拍攝。 – 2008-11-16 03:16:13

回答

10

這聽起來像是你的VS2008安裝有問題,或者你的DLL搜索路徑有問題。 MSVCR90.DLL在安裝VS2008時安裝,您不必安裝任何其他可再發行組件包。

首先,我會檢查你的PATH環境變量,並確保沒有gobbledydook會破壞一些條目,如果你沒有發現問題,那麼我會卸載並重新安裝Visual Studio。

您也可以嘗試搜索MSVCR90.DLL(以及其他類似的DLL),並將它們移動到Windows/System32文件夾中。

如果你只是想現在就走,你可以做的另一件事是改變你的項目靜態鏈接到運行時庫,然後它甚至不會嘗試加載該DLL。轉到您的項目設置,配置屬性 - > C/C++ - >代碼生成,並將運行時庫從多線程DLL更改爲多線程(或任何不以DLL結尾的選項)。

6

這裏有一些事情在常規選項卡來檢查你對以項目的配置:

  • 0.1配置類型 - exe文件在您的案件。
  • .2使用MFC:如果這是一個MFC應用程序,它可能會更便攜,如果你這樣做:在一個靜態庫中使用MFC。
  • .3使用ATL - 如果不使用atl(或不確定)說不使用ATL。
  • .4在C/C++ - >運行庫中:說多線程調試(用於調試版本)或多線程(用於發佈版本)。

如果您收到特定鏈接的錯誤,說一些已定義: 這意味着,你有你的應用程序的某些部分(單獨林達被鏈接到你的exe文件),它們具有不同的運行時連接內置:

您可以:

  • 確保這些庫用相同版本的Visual Studio爲您的應用程序編譯。

  • 更改這些項目爲使用靜態運行:C/C++ - >代碼生成 - >運行時庫:/噸或MTD(以上同#4)

  • 如果您仍然有一些具體的錯誤試着告訴鏈接器忽略某些庫:轉到鏈接器 - >忽略特定庫並放入要忽略的庫中。這是'libcmt.lib'或'libcmtd.lib'最常見的。知道以'd'結尾的lib通常是調試版本也很重要。如果你正在創建一個發佈版本,並且你正在'已經在libcmtd.lib中定義',這意味着你正在將一個發佈版本庫鏈接到一個調試庫。

0

如果你把完成的exe文件給別人,他們需要安裝最新的visual c運行庫來運行它。這隻適用於發佈版本AFAIK。 Visual Studio應該將所需的運行時間都發布和調試安裝到您的路徑中。該項目可能會爲運行時的錯誤版本意外設置附加依賴項。

看看this page有幫助。

4

如果您刪除與您的.exe相關聯的清單文件,您將得到相同的錯誤。

MSVCR90.dll未安裝在system32中,但在並排文件夾中,因此需要清單。

0

轉到您的項目設置,配置屬性 - > C/C++ - >代碼生成並將運行時庫從多線程DLL更改爲多線程,然後嘗試編譯但不會。然後將其更改爲多線程調試並嘗試編譯,但不會再次,然後將其更改回多線程DLL,然後它應該編譯並運行。

3

我剛剛被這個咬了,this page讓我再次工作。

關鍵是忽略調試配置的MSVCRT和MSVCR90庫。設置鏈接器 - >輸入 - >忽略特定庫設置,包括以下內容:

  • MSVCRT
  • MSVCR90