2009-11-27 16 views
2

最近,我跟着它是否合法或不建商業/專有應用了Qt4-interest郵件列表上的討論和靜態鏈接的Qt4進去。雖然有一些未經證實的方式(通過向客戶提供目標文件和Makefile等),但這聽起來不像是一個好主意。大廈優化的Qt4 - 「的./configure」標誌及其含義

我的一個項目使用LGPL許可的Qt4庫和我船它們作爲單獨的DLL/Dylibs /這樣對我的客戶,使用所有平臺上的一個簡單的安裝。雖然這個作品不錯,到目前爲止,我想通過只包括我需要什麼,二)增加我的應用程序的啓動/加載減速Qt庫的大小,以優化)的安裝程序的大小。

我熟悉編譯Qt的自己,但Qt的有很多標誌和開關。

現在我用下面的標誌建築:

./configure \ 
    -fast \ 
    -opensource \ 
    -qt-sql-sqlite \ 
    -nomake demos examples \ 
    -silent \ 
    -no-qt3support \ 
    -no-gif \ 
    -plugin-sql-mysql \ 
    -release \ 
    -no-xmlpatterns \ 
    -no-multimedia 

我不能完全肯定其效果/影響下面的標誌有:

  • -no-stl
  • -no-javascript-jit
  • -no-nis
  • -separate-debug-info
  • -no-openvg
  • -no-mitshm

還有什麼我能做的,例如,通過提供優化開關編譯器,或「剝離」未使用的功能進行內置Qt庫,使之更小(這對靜態構建來說很容易)。我沒有太多的經驗。

哦,只是作爲一個側面說明,我的編譯的應用程序大小約爲600 KB(未剝離的)對Qt的動態鏈接時。我對它進行了實驗,發現靜態鏈接時其大小約爲4 MB;但這樣我就不必再包含40 MB的Qt庫了。

所以,把一切都入一個問題/請求:

如果你比我更先進的關於這個主題,你怎麼優化/部署自己的應用程序,並確保他們啓動速度快,只包含需要什麼?

回答

2

有跡象表明,我能想到的幾件事情:

  • 使用編譯器/連接組合,做良好的尺寸優化。 MSVC比MinGW好得多。所有使用MSVC構建的Qt發行版DLL總計約爲21 MB。用MinGW構建它們的總計爲41 MB。順便說一下,你真的需要所有的DLL?
  • 使用-ltcg(鏈接時間代碼生成)標誌優化跨目標文件。
  • 使用預處理器標誌來排除部分Qt功能。例如:QT_NO_STL = -no-stl。
  • 現在嘗試的MMX/3D/SSE2標誌
  • 除去一些樣式(-no-風格 - )
+0

感謝您的答覆! 其實,我只是運送需要的東西,包括QtCore,QtGui,QtWebKit,QtXml,QtSql和QtNetwork。 我使用'-no-stl'時有什麼問題?我會盡力瞭解更多關於鏈接時間代碼生成的內容,因爲這似乎很有趣。另外排除一些樣式是一個非常好的主意,因爲我只是在OS X/Windows上使用本機樣式。 – BastiBen 2009-11-27 08:58:51

+1

您將失去QString和basic_string之間以及QTL容器和STL容器之間的轉換函數。 – rpg 2009-11-27 12:51:05

+0

感謝您解決這個問題。我不記得在任何地方使用過STL類/類型。通常Qt的東西對我來說工作得很好。 :) – BastiBen 2009-11-28 11:43:53

2

當你跳過所有模塊等,你覺得你並不需要,那麼你可以繼續使用qconfig工具(隱藏在$ QTDIR/tools/tree中)並刪除單個類。只要注意依賴關係 - 您可能需要迭代幾次來獲取Qt才能構建(例如,QSpinBox取決於存在的QValidator)。

建立Qt時,特別是多次,-nomake標誌是一個很好的定時器。嘗試-nomake示例-nomake演示。

0

對於一般速度的另一個優化在於在編譯Qt時使用編譯器優化,但是你必須編輯一些文件。 當你從Git獲得Qt時,你會得到一個qtbase/dir。 首先你執行配置腳本,它建立QMAKE

注:可以修改Makefile.win32或Makefile.unix並添加線,如:

QMAKE_CXXFLAGS_RELEASE = -CompilerDependentOptimizerSwitches 
如果你想qmake的進行優化

,但考慮到qmake的運行時間可能是整個中型應用程序編譯時間的0.0000001%,我認爲這不是必須的。

但是real優化來編輯用於構建Qt的mkspecs。

例如,在使用VS2012的窗口下,您可能會修改qtbase/mkspecs/win32-msvc2012/qmake.conf

Ex。 :在默認Qt5.1中,msvc2012 mkspec寫着:

QMAKE_CFLAGS_RELEASE = -O2 -MD 
QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE 

既然要優化尺寸,你可以將其替換爲:

QMAKE_CFLAGS_RELEASE = -O1 -MD 

(據http://msdn.microsoft.com/en-us/library/8f8h5cxt.aspx

有時它包含在qtbase/mkspecs/common/ dir中找到的更多高級mkspec。

我成功地在Debian/g ++ 4.8.1上編譯了Qt5.1,其中-O3 -march=native(默認爲-O2),如果它服務於任何人。

做完這些之後,只需在QT git根目錄下運行make,然後去與你的團隊一起喝啤酒,因爲即使在一臺好的計算機上,它也需要很長時間(在i7上大概需要2小時,而沒有構建演示/例子,但與webkit)。