2014-01-13 72 views
5

我有以下問題:我使用Microsoft Visual Studio 2012,它將msvcp110.dll添加到我的發行版中。我在這裏和那裏閱讀了一些帖子,我知道這是由於我使用iostream和字符串並將其鏈接到我的程序所導致的。在我的電腦上使用此功能沒有任何問題,但我想將其展示給其他人。所以我的問題是,我如何儘可能無痛地解決問題,並仍然使用一些基本的標準物品?我知道其他人可能只是安裝Visual Studio Runtime的東西,但這很痛苦。msvcp110.dll,我該如何解決它?

+1

或者你可以使用靜態鏈接。 – user2802841

回答

8

如果您打算保留您的應用dynamically-linked,您的最終用戶需要安裝Visual C++ Redistributable for Visual Studio 2012

這是提供應用程序,原因如下的首選方式:

  1. 二進制大小 - 您的應用程序二進制文件會小一些,因爲庫函數不掛
  2. 安全 - Microsoft可再發行的DLL可以通過Windows Update進行更新。如果在其中一個庫中發現漏洞,他們可以修復它,並且所有動態鏈接的程序立即不再受到攻擊。
  3. 內存佔用 - 如果多個進程都使用同一個DLL,則只需將其加載到(只讀)內存一次。所有進程在內存中共享DLL文本的副本,從而減少進程的總體內存使用量。

或者,你可以statically link您的可執行文件。通過在Visual Studio中更改程序的構建選項來實現此目的。

在Visual Studio 2010中,這是下配置屬性>C/C++>代碼生成>運行時庫

enter image description here

默認(/MD//MDd)告訴VS違背自己的運行時DLL鏈接。

靜態鏈接,你想這個改變的非DLL選項之一(/MT//MTd)確保選擇正確的調試/非調試版本(在開關的小d)。


參見:

+0

謝謝你的回答!我知道最終用戶應該有這樣做才能讓事情變得更快,但目前這是一個小程序,我只想將它發送給幾個人。但回到問題 - 我選擇了截圖中的選項,但它仍然無法正常工作。我錯過了什麼?這是我的[代碼生成窗口](http://i.imgur.com/byqKHC5.png)。 –

+0

你有沒有改變它?它仍然設置爲DLL。你想'多線程(/ MT)'。我會重新回答我的答案。 –

+0

啊,我明白了 - 感到困惑。我會檢查明天是否有效,現在是我去睡覺的時候了。感謝幫助! –

相關問題