2016-11-07 59 views
0

MSVC++爲希望僅部署單個可執行文件的程序員提供優化。您可以使用/ MT構建將C++運行時庫和標準C++庫鏈接到EXE;或/ MD來調用C++運行時庫(.DLL文件)。如何部署只有一個可執行文件

但是對於您自己的代碼或第三方DLL,是否可以只生成一個可執行文件?

假設項目PrjA使用PrjB;現在,PrjB只生成動態庫PrjB.dll,而不是靜態庫PrjB.lib。它有一種方法來配置它們,以便PrjA可以生成PrjA.exe,裏面嵌入PrjB.dll,這樣只需要部署1個文件?

注意:約束條件只提供PrjB.DLL,沒有靜態庫prjB.LIB。這個問題不同於C++ How to compile dll in a .exe

MSVC /MD, /MT config using C++ Runtime Library

  • /MD導致使用運行時庫的多線程特異性和 特定DLL版本的應用程序。

  • /MT使應用程序使用運行時庫的多線程靜態版本。

+0

*有沒有辦法將它們配置爲與/ MD,/ MDd,/ MT,/ MTd類似的效果?*請詳細說明。在閱讀這些標誌的文檔後,我不清楚自己不明白。 –

+0

看起來問題是「如何將所有項目靜態鏈接到單個可執行文件」。不知道運行時庫設置需要做什麼,但要靜態鏈接您的項目,您需要將項目類型從「動態庫」更改爲「靜態庫」。 –

+0

好吧,讓ProjB生成.lib然後。/MD// MT開關不會使.dll文件進入.exe文件,它們只是在同一個庫的兩個版本之間進行選擇 - 一個編譯爲.dll,一個編譯爲.lib。如果你真的無法制作.lib文件,而且你真的需要單一的.exe文件,那麼有一些工具可以將應用程序「捆綁」到單一的exe文件中 - 有關更多詳細信息,請參閱其他問題。 –

回答

0

至於其他幾個SOanswers提到,有可用於這個任務的外部工具。 BoxedApp其中(但付費)是高度重視。

相關問題