怎樣解決Qt發布程序體積過大的問題?

最近Qt寫了個小工具,想打包發布一下,找出了Qt所有的動態鏈接庫,發現打個包以後竟然有20多M,實在是有點大了(只用到了core,gui,widget三個),請問怎樣才能讓Qt發布的程序更小?


看你用了core gui widget,說明你是用Qt 5.x的,5.x增加了很多新特性的確大了一些。

如果只是寫個小程序,不需要5.x的新特性,那麼推薦Qt 4.7.x/4.8.x。

Qt適合三種場景,

1. 必須跨平台項目

2. 大項目,代碼行數在30萬+

3. Qt鐵杆粉的項目

這三種場景下,安裝包大小都不是主要問題。

減小安裝包的方法也很簡單:自己編譯Qt庫

在configure的時候去掉RTTI,異常,Qt3支持,優化選項用最小大小(性能差不了太多)。

如果你的程序真的很小,那麼可以直接靜態鏈接,這樣就更小了。

給你個參考:

Qt 4.7.1 下靜態鏈接的Helloworld,大約 1.8mb。

Qt 4.7.1 下動態鏈接的QtCore+QtGui+imageformat plugin 大約 7 mb。

Qt 5.x以後才把Widget從QtGui里分離了出來,4.x的時候有 QtCore 和 QtGui就夠了。

這是我的 YY語音項目用到的Qt庫的大小,是基於 Qt 4.7.1 的

附送兩個以前寫的答案,供參考。

為什麼 Qt Creator 的編譯如此之慢? - 編程

QT 如何打包一個軟體? - 編程


樓上所有人的回答其實我都不滿意。

-----------------

最根本的解決之道 就是 從源頭下刀,在代碼里 減少依賴。每當你很注重發布包體積,而且需要引入一個新的動態庫依賴的時候,多問問自己,反覆摸著心問問自己,是否真的不得不這樣做。

-----------------

我說這句話,是因為我見過太多的程序員,不論是其是否是菜鳥還是經驗豐富,他們總是不經意間為了一個很微不足道的理由而引入額外的動態庫模塊,或者第三方庫。其實很多時候稍微改改代碼,或者稍微多寫一點代碼,或者稍微多看看Qt的文檔,甚至換種架構層次的實現,就能完全可以繞過去,減少一個有幾M,甚至一連串相互依賴的動態庫。


你先參照姚東老師的說法靜態鏈接,然後再upx壓縮下,我靜態鏈接了webkit之後一個exe有50多m,加了upx之後只有16m多點


幾十兆不算什麼吧,現在的軟體動輒好幾百兆,現在的軟體體積都是過百兆。網速越來越快,人們已經不在乎幾十兆了吧,使用QT的程序,體積還是很小的,參考WPS Office,功能那麼強,不輸於微軟的,安裝後才170多兆。還有夜神安卓模擬器,才200M就很強大了。如果你想開發幾百k的界面應用的話,還是用vc或者vb吧。


不靜態編譯 拖著dll其實也有好處的 就是在更新程序的時候不用再下一遍庫


只需要platformsqwindows.dll、Qt5Core.dll、Qt5Gui.dll、Qt5Widgets.dll四個。Qt 5拆得那麼散就是想解決這個問題。所以不要打包所有的dll,用到哪個就加哪個


限制修改,我來補一下圖吧!:)

給一個打包地址吧,有興趣的親們可以看下哦!

鏈接:http://pan.baidu.com/s/1i3KQatn 密碼:kkb6


推薦閱讀:

0基礎自學c++到找到一份開發工作?
c語言里malloc的最優實現方式是什麼?
Qt沒有真正完美的無邊框解決方案嗎?
知乎上看到一些人評價c++的exception很難用,想問一下大家寫c++時怎麼處理錯誤?

TAG:QtC開發框架 | CC | QtQuick |