1. 程式人生 > >【C++】VS2010生成的程式在安裝了vc2010執行庫的機器上提示“丟失MSVCR100D.dll”

【C++】VS2010生成的程式在安裝了vc2010執行庫的機器上提示“丟失MSVCR100D.dll”

理論上,如果一臺電腦無須安裝多大2.5G的VS2010,只要安裝了vc2010執行庫,也就是安裝了vcredist2010_x86.exe和對應的Framework執行庫,那麼只是你將解決方案所在的資料夾中的Debug資料夾扔到這臺機器上,直接雙擊裡面的exe檔案就可以運行了。一般情況下,由於使用者會在機器上安裝軟體或者遊戲,一般都會不知不覺裝好vcredist2010_x86.exe和對應的Framework執行庫,直接將Debug的東西以綠色版釋出,會比打包成一個setup.exe,,讓使用者安裝,便捷得多。在VC2010將解決方案打包成安裝嚮導具體見《【C++】VS2010將寫好的程式打包成安裝檔案釋出》(點選開啟連結

)。你也舒服,使用者也舒服。

但是,如果你的解決方案按照預設屬性來,沒設定好配置屬性,直接將Debug資料夾丟給別人,會提示“丟失MSVCR100D.dll”導致程式無須執行。

MSVCR100D.dll是VS2010才有東西,除錯用的dll,而不是vc2010執行庫裡面的核心dll,MSVCR100.dll。前後少了個D,當然兩個dll是完全不同的。此時你有兩個解決方法:

一、最沒有技術含量的,就是將本機C:\Windows\System32中的MSVCR100.dll,複製到執行機器上同樣的位置,但是我們不推薦這種方式。

二、我們將VS2010靜態編譯。因為使用動態編譯,使用VS2010編譯的程式在其它系統中執行時經常會出現找不到相關的DLL檔案,我們可以使用靜態編譯的方法把這些執行依賴檔案打包到exe中來,以減少對環境的依賴,但不代表使用者可以不裝vc2010執行庫就可以直接執行你的程式,因為MSVCR100.dll還是需要的。

具體設定如下:

一般配置配置兩項:專案->配置屬性->常規->MFC的使用:在靜態庫中使用MFC。專案->配置屬性->C/C++->程式碼生成->執行庫:選擇/MT或者/MD。 


之後,清理一下解決方案,別讓它重新生成,即可:


如果在重新生成的時候,報:error LNK2019: 無法解析的外部符號 __imp___CrtDbgReportW的錯誤,那麼所在的專案點右鍵,選擇“屬性” -> “配置屬性” -> “C/C++” -> “前處理器” -> “預處理定義” 移除_DENUG或將 _DENUG改為NDENUG即可。


這樣重新生成之後,解決方案所在資料夾下的Debug資料夾裡面的exe,則變成依賴於VC2010執行庫了。直接丟個Debug資料夾到已經安裝VC2010的機子裡面的exe可以直接運行了。