2010-09-06 67 views
2

我使用MSVS 2010和MSVC++ E 2010在C++中構建我的應用程序,並且我注意到很多我的朋友(他們在PC上測試我的應用程序)未在其計算機上安裝Microsoft C++運行時庫。我已經開始在我的應用程序中包含Microsoft C++可再發行組件包,但這似乎沒有必要。我能否將庫包含在我的可執行文件目錄中?我知道其中一個使用的庫是msvcr100.dll,但是還有其他我需要包含的嗎?或者是我的最佳選擇redistro?包含MS C runtime distro的替代品?

回答

5

在您的項目選項中,對於代碼生成,您可以選擇STATICally linked libraries而不是DLL版本。這消除了像這樣的外部依賴的需要,代價是更大的EXE。

+0

完美,正是我所需要的!沒有運行時,它在我朋友的個人電腦上工作得很好。 – Dooms101 2010-09-08 23:38:38

2

你不一定需要有具有可執行目錄中運行時庫,你可以使用一個Manifest File具有指向運行時,如果你希望一個相對路徑。但是,是的,您可以在應用程序的安裝中包含這些庫。

我認爲我們在msvcr以及msvcrt和msvcp DLLs的問題上寫了這些,可能會有點矯枉過正。

1

用/ MT編譯項目解決了分發問題。但要小心,當你使用DLL時,它可能會讓你陷入麻煩。他們將擁有自己的內存分配器。如果他們導出了一個公開指針或C++對象的函數,這些對象需要由客戶端代碼釋放,那麼您將很難診斷手中的內存泄漏。很容易做到,例如只返回一個std :: string。

Anyhoo,通過右鍵單擊解決方案資源管理器窗口中的項目,屬性,C/C++,代碼生成,運行時庫設置找到該設置。

另請注意,VS2010支持本地部署。只需將msvcr100.dll文件放在與EXE相同的目錄中即可。如果使用STL或iostream,則還需要msvcp100.dll。