2017-01-23 159 views
2

我想編譯我的程序,所以它創建一個獨立的EXE。 其實我有2個問題:編譯靜態鏈接VS2015

我沒有去屬性 - > C/C++ - >代碼生成 - >運行時庫,並更改爲多線程(/ MT)。

我這樣做後,.exe文件的尺寸增加了,但是當我嘗試使用另一臺計算機上,錯誤「不能運行這個程序,你需要一個名爲DLL:msvcp140d.dll」

這是2個問題,我不明白爲什麼它要求我使用DLL的調試版本,因爲我正在編譯發行版本,我不明白爲什麼它要求我使用DLL,因爲我認爲他們是靜態鏈接/:

PS:我想編譯一個OpenCV3.0項目。我不知道它是否有幫助:/

編輯:一個問題已經解決了:我在發佈鏈接程序中使用我的程序使用MSVCP140d.dll中使用opencv_imgproc310d.dll。 現在我仍然遇到exe文件不是獨立的問題。它需要DLL才能正常工作。 (我剛剛上了我的VS,所以我有最新版本)。 謝謝

+0

據我所知,你使用多線程的事實並不意味着你正在使用靜態運行時。這是另一回事。 –

+0

http://stackoverflow.com/questions/20890458/compile-c-in-vs-without-requiring-msvcp120d-dll-at-runtime 我在這篇文章看到這個解決方案:/ –

回答

0

你是正確的,如果你使用/ MTd標誌,你不需要外部依賴(如Microsoft DLL文件)。但是因爲可執行文件的標誌大小增加(因爲它包含更多的二進制代碼)。

你的問題「不能運行這個程序,你需要一個名爲DLL:msvcp140d.dll」是因爲你沒有設置運行時庫兩種配置:

  • 調試:你需要設置多-threaded調試(/ MTD)標誌
  • 發佈:您需要設置多線程(/ MT)標誌

一定要同時設置,否則只有一個配置將運行。

+0

我做了你所說的。我修改了兩個,但結果仍然是一樣的。 我無法運行exe文件。並且錯誤消息仍然出現。它說,我沒有...我的電腦上的d.dll(再一次,這是奇怪的,因爲我建立了一個發佈版本,並要求我一個調試DLL .../:) –

+0

你有多個項目如果是的話,你是否正確設置了它們? – fr3nzy90

+0

我只有1個項目。我認爲我正確地設定了他。 –