之前才提到,使用 Microsoft Visual C++ 2005 Express Edition 會有缺少函式庫的不明原因。昨天試了一下,其實只要在編譯 wxWidgets 時,加入 RUNTIME_LIBS=static 的選項,讓 runtime linking 的模式改為 static 就可以解決這個問題了。

不過要注意的是,當編譯 wxWidgets 使用 RUNTIME_LIBS=static 這個選項時,後續編譯應用程式時的編譯器選項要加入 /MT;當編譯 wxWidgets 使用 RUNTIME_LIBS=dynamic 這個選項時,後續編譯應用程式時的編譯器選項要加入 /MD。

Runtime linking 使用 static 與 dynamic 的差異性就不在此討論。不過使用 static 的方式對我目前倒是比較方便,省去了缺少函式庫的風險。另一個比較顯著的影響就是執行檔的檔案大小。用同樣的程式碼編譯,當 Runtime linking 為 dynamic,得到的執行檔為 1,466,368 位元組,用 upx --best 壓縮過之後則是 504,320 位元組;當 Runtime linking 為 static,得到的執行檔為 1,646,592 位元組,用 upx --best 壓縮過之後則是 592,896 位元組。

雖然兩種方式得到的執行檔大小有差,但是比較使用 mingw-3.4.5 得到的執行檔大小來講,算是小蠻多的了。目前使用 Microsoft Visual C++ 2005 Express Edition 還算正常,它會成為 wxWidgets 的好伙伴嗎?期待中!

全站熱搜

zxlin 發表在 痞客邦 留言(0) 人氣()