2014-12-01 52 views
7

我知道有關於如何將msvcr120.dll/msvcp120.dll包含到您的項目中的一些問題。擺脫msvcr120.dll/msvcp120.dll依賴於我的發佈應用程序(VC++ 2013)

但我想放棄依賴關係。我在Release版本編譯程序,在Visual Studio 2013年,我不依賴於任何特定的VS-命令(#pragma等)或預編譯頭等等

我想把它編譯成一個單一的發佈.exe和提供給用戶而不要求他爲VS安裝VC++ Redistributes(用戶將在Windows 7,Windows 8或Windows XP上工作)。

這可能嗎?如果是這樣,怎麼樣?

+1

如果不需要可再發行組件,則必須使用靜態運行庫。 – drescherjm 2014-12-01 19:50:09

+0

我應該使用/ MT選項嗎?對於任何.lib,我都編譯幷包含到項目中?什麼與第三方.dll文件? – PolGraphic 2014-12-01 19:54:01

+1

'#pragma'和大多數VS特定的命令不依賴於msvcr。擁有_globals_取決於C++運行時。這也是主要的問題。你需要這個代碼。但是,正如drescherjm所說,你可以在你的exe中嵌入這個lib代碼(通過'/ MT'或'/ MTd'選項),然後你不需要單獨的dll文件。 – 2014-12-01 19:58:01

回答

13

通過設置/MT標誌,您可以將運行系統靜態鏈接到項目。您可以在項目找到在Visual Studio 2013年這一選項>[項目]屬性...>配置屬性>C/C++>代碼生成>運行時庫。確保只將其設置爲版本配置。

+1

我會推薦這個作爲可接受的答案,因爲它清楚地描述了它必須完成的工作。指出評論並不能爲最終用戶提供雄辯的答案。 – 2015-05-04 15:01:25

+1

即使將其更改爲MT後,我仍面臨同樣的問題,但它仍然給msvcr120.dll找不到錯誤消息 – 2016-07-15 09:07:44

3

來自評論。要刪除可能需要可再發行組件的需求,可以使用靜態運行時(/ MT選項)而不是任一動態運行時選項來構建應用程序。

+0

感謝您的回答。這種方法有沒有副作用?可以添加沒有用'/ MT'選項構建的.lib以用'/ MT'選項進行投影嗎?如果不是,我如何確定例如一些第三方庫已經建立,有或沒有'/ MT'選項? – PolGraphic 2014-12-01 20:32:59

+0

第三方DLL很可能會使用/ MD,你想要防止這就是爲什麼你需要避免這些。 – drescherjm 2014-12-01 20:38:09

+0

@dreschermj - 嗯,好的。但是,爲了運行我的遊戲/應用程序,要求用戶安裝VC++重新分發程序是非常不雅觀的。我個人不喜歡安裝程序試圖安裝它們或其他共享資源以及我想要安裝的應用程序。 – PolGraphic 2014-12-01 20:40:10

相關問題