2014-02-13 61 views
2

我是qt.I的新手,我做了一個非常簡單的qt程序,因爲我沒有商業許可證我使用了依賴walker並將所有.dll從我的qtsdk文件夾添加到我的釋放文件夾。它工作得很好。但是當我檢查它的大小時,它是非常大的。我的問題是如何使它變小。還解釋了靜態和動態庫之間的區別以及它如何影響應用程序的大小。有多種方式有沒有購買商業許可證使qt應用程序更小。任何幫助表示讚賞。我該如何讓Qt應用程序變得更小

+0

碰巧,我在一週前回答了關於靜態和動態庫的問題,請參閱http://stackoverflow.com/a/21651275/1741542 –

+0

您不需要商業許可證就可以減小二進制文件的大小。 –

+0

你必須使用QT靜態鏈接。 –

回答

8

一般來說,沒有什麼可以做到顯着減少應用程序及其依賴的大小。有幾件事我不認爲你已經考慮過了,或者如果有必要的話可以這樣做:

  1. 你不需要所有的Qt DLLs。取決於你使用的Qt的哪些部分,你可以忽略像QtWebKit和其他的東西。這可能會將您的應用程序重新分配大小減半。

  2. 如果它是您的可執行文件很大,請嘗試使用選項進行編譯以優化大小而不是速度。根據您的應用,最終的性能應該接近或甚至可能比通常的優化所做的要好。這對於GCC是-Os,對於MSVC是/Os

  3. 剝離調試符號的DLL和可執行文件。發佈版本應該已經自動完成。我希望你不會抱怨調試二進制文件的大小...

  4. 緊湊的二進制文件,像UPX。這只是表面上的,而且還附帶some subtle drawbacks

  5. 用上述選項重新編譯Qt,這可能會削減總Qt DLL大小的5-10%。您還可以禁用不需要的功能(如未使用的Qt樣式),從而進一步縮小DLL的大小。但是這很乏味,可能不值得,因爲無論何時更新到最新版本,都需要重新編譯Qt。


話雖這麼說,如果你的代碼是GPL許可,沒有什麼從靜態鏈接的Qt阻止你。您將需要自己編譯靜態Qt庫,或者在某處找到它們。通常,靜態鏈接將增加可執行文件的大小,但可能允許編譯器忽略圖像中通常仍會出現在DLL版本中的未使用的代碼。所以是的,靜態鏈接可能會使你的應用程序的總大小變小。

+1

對於第3點+1。有一段時間,只有調試版本是由我自己mady :) – Zaiborg

+0

Qt運行時可以完美與UPX –

+0

@Dmitry感謝您的建議,我忘了UPX。增加了一個額外選項。 – rubenvb

相關問題