wxWidgets 2.9.2svn(3.x)最小體積編譯方法

老鄧發表於2010-11-25

官方論壇、網上記錄的wxWidgets編譯方法,會導致編譯後的程式庫非常大,原因在於對編譯的方法選擇不當。
下面簡單總結一下如何編譯最新的SVN程式碼。
下載最新原始碼(每日構建):http://biolpc22.york.ac.uk/pub/Daily_HEAD/

或者使用subversion檢出:http://www.wxwidgets.org/develop/svn.htm

準備工作:
1. 刪除include/wx/msw/setup.h(如果該檔案已經存在)
2. 修改setup0.h,設定以下巨集的值為 0 !
   WXWIN_COMPATIBILITY_2_8
   wxUSE_EXCEPTIONS

 

GCC版本:
修改makefile.gcc檔案:區分大小寫搜尋"_gcc",替換成""

 

VC版本:
修改makefile.vc檔案:區分大小寫搜尋"_vc",替換成""

 

VC靜態版:

 

大家在編譯時,可以視情況調整選項,由於我在編譯wxWidgets時,習慣一個工程要同時相容VC和GCC編譯器,而且一些小程式,喜歡在最終釋出時使用靜態連結釋出的方法,所以才有了上面的三個版本。

 

通過這些選項,可以最大程度的減小生成的庫的大小,以及靜態連結要執行檔案的大小。

你便會發現,其實通過適當的方法,是可以儘量的減小wxWidgets生成庫的大小的。

 

以今天的svn原始碼為例:

(GCC版)wxmsw292u.dll 6.65MB

(VC版)wxmsw292u.dll 6.66MB

靜態版可執行檔案:

(GCC版)2.01MB

(VC版)1.31MB

 

其中兩個選項:USE_EXCEPTIONS=0 USE_RTTI=0由於在wxWidgets庫中不使用RTTI和異常,這會大幅度減小可執行檔案的體積(減小30%左右),取消這兩個選項,只能說明在wx庫中不再支援RTTI和異常,但不程式碼你基於wx的程式中不能使用RTTI和異常!

至於這兩個開關是否導致wx的功能缺少,這我目前還沒有查詢到任何依據。

不過,官方的wiki是支援這種做法的:http://wiki.wxwidgets.org/Reducing_Executable_Size

 

可以確定的是:使用VC編譯器對最終程式的發行,無論是程式體積、還是速度,都明顯優於GCC(MinGW)。

基於wxWidgets開發的朋友,如果要在Windows平臺上釋出程式,建議使用VC。

 

說明:

  1. VC編譯器在優化體積的其他一些做法,例如/ALIGN、 /MERGE選項,通過實踐證明,不但不能減小wxWidgets編譯後的二進位制體積,反而起到相反的效果。
  2. 以上測試只在Windows平臺測試通過,並未在Linux平臺進行驗證。

 

版權所有,如需轉載,敬請註明出處!

相關文章