標籤:

如何減小GacLib生成的可執行文件大小?

使用Visual Studio 2015編譯vczh-libraries/Release · GitHubTutorial中的示常式序,在Windows下生成的可執行文件、動態鏈接庫體積一般都很大。以「GacUI_HelloWorlds」解決方案為例,不更改任何代碼和編譯設置,在Debug模式下,生成的可執行文件、動態鏈接庫體積如下:

  • GacUI.lib 207MB

  • GacUI.pdb 37.6MB

  • GacUILite.lib 52.6MB

  • GacUILite.pdb 10.8MB

  • Vlpp.lib 55.2MB

  • Vlpp.pdb 8.66MB

  • Workflow.lib 64.8MB

  • Workflow.pdb 11.3MB

  • Cpp.exe 12.9MB

  • Cpp.pdb 59.4MB

  • CppXml.exe 42.2MB

  • CppXml.pdb 201MB

  • MVVM.exe 42.4MB

  • MVVM.pdb 201MB

  • WorkflowScript.exe 42.2MB

  • WorkflowScript.pdb 200MB

那麼如何減小GacLib生成的可執行文件大小?我想到的方法主要包括編譯器選項、GacLib庫裁剪、可執行文件壓縮三個方面,具體如下:

  • 是否可以更改編譯器選項來減小生成的文件大小?具體可以更改哪些編譯選項?
  • GacLib中是否提供類似「#define GACLIB_EXCLUDE_XXX_FEATURE」之類的編譯宏來控制一些功能是否參與編譯,以便於減小生成的動態鏈接庫大小?
  • 是否可以對生成的可執行文件進行壓縮處理(例如UPX)來減小文件大小?

是否還有其他方法來減小可執行文件大小?


1、不要用XML,這樣就不需要鏈接GacUIReflection.cpp,就小了

2、過幾個月我會上線一個功能,使用XML也不需要GacUIReflection.cpp,就小了

我的理念是通過鏈接或者不鏈接某個cpp來做EXCLUDE_XXX_FEATURE的功能。每個cpp都有它自己初始化的plugin,會替你做一些事情。

但是pdb和obj肯定是巨大的,debug的exe通常也是release的好幾倍,我只能幫你管到release的exe了。問題裡面的尺寸都是debug模式下的尺寸,會被VS混進超多debug用的信息。


推薦閱讀:

OCaml pattern有哪些葵花寶典?
C語言if與else if寫成的這樣一段代碼效率上或者編譯完成後的結構上是否有區別(主要看補充內容中的詳細)?
如何實現 C 語言編譯器?
做編譯器優化開發是一種什麼樣的體驗?

TAG:編譯器 | GacLib |