最近須要使用QT寫一個程序,選擇了比較新的QT5.3以得到更多特性進行快速開發。可是QTCreator編譯出來的程序是動態連接版本,接着就頭痛了,本身程序很小,可是所須要攜帶的動態連接庫卻很大,即便是發佈版本,依然須要攜帶一個龐大的qt庫,那麼如何減少發佈體積呢?(ps:開源版本的qt,其lib文件夾下的*.lib文件不是真正意義上的靜態庫文件,其裝載的是dll的入口地址等信息)html
大概有這麼兩種方案:app
重編譯qt生成真正的靜態連接版本,而後以靜態連接方式生成程序。(這方案理論效果應該是最好的,畢竟在編譯前,還能夠去掉qt中你用不到的模塊,惋惜靜態編譯過程複雜,並且容易出錯)post
繼續使用動態版本,可是想辦法重編譯qt或者部分qt,經過裁減qt減少依賴的dll體積。spa
這裏決定從第二種方案入手。.net
觀察一個普通的qt5桌面工程,依賴下列DLL文件:prototype
其中Qt5開頭的dll,平均每一個佔用4M,並且看樣子是不重編譯qt是沒法減少其體積的。(經過重編譯qt,能夠去除對icu等模塊的依賴,從根本上解決問題,不過過程比較複雜,須要對qt各個模塊的關係有所瞭解,暫時不說)。htm
可是,另外一方面,能夠發現其中第三方庫的icudt52.dll高達22M,其實這是一個國際化資源庫,攜帶了各類語言信息等。其中大多數你都是用不到的。(貌似qt4不須要這幾個dll文件)也就是說,若是可以重訂製icu庫,去除不須要的資源,就能大幅減小發布程序依賴DLL體積。(若是你的項目使用了Qt5Webkit,不推薦裁減ICU庫。)資源
ICU庫自己就提供了定製的服務,所以很是方便。開發
安裝MSYSget
可用的MinGW編譯器,直接用Qt自帶的MinGW.
下載ICU源碼,接着打開MSYS Shell執行(這裏注意ICU版本,這裏使用的是52l)
$ cd icu/source $ export PATH=/C/Qt/Qt5.1.0/Tools/mingw48_32/bin:$PATH $ ./runConfigureICU MinGW –prefix=$PWD/../install |
到ICU定製數據頁面把不須要的選項點掉後,點「Get Data Library」按鈕下載定製的文件icudt52l.dat,接着把icudt52l.dat文件複製到icu/source/data/in目錄內。
接着執行:
$ make $ make install |
所有完成後dll文件能夠在icu/install/bin目錄裏找到。