2013-08-19 43 views
3

我正在尋找一種方法來創建一個最小的靜態構建的Qt 5.1。通過最小化,我的意思是隻有基本的可用組件類的構建(包括通過OpenGL畫布/小部件的2D圖形加速)。我的目標是在Windows 7 32位上使用MinGW-builds GCC 4.8.1以及他們的MSYS和工具包進行靜態構建。Qt 5.1的模塊及其相互依賴性?

我已經下載了整個源代碼樹,並且由於OpenSSL和ICU(最新的OpenSSL沒有編譯)等軟件包的依賴性而遇到了一些編譯問題。我想看看,如果我可以避免這些包的依賴關係,並且同時實現Qt 5.1的最小靜態構建,那麼我的最終可執行文件的大小並不是很大。

我看看這個清單: http://download.qt-project.org/official_releases/qt/5.1/5.1.0/submodules/

Q1:我需要選擇哪個模塊才能擁有基本的Qt構建,而不需要所有的功能?

Q2:這些模塊是否以某種方式相互依賴(我假設它們都依賴於「qtbase」)?

Q3:我使用的名稱從該列表中,(例如: 「qtxmlpatterns」, 「qtx11extras」, 「QtWebKit的」,等等),以取消他們在我的Qt的生成配置?

這對Qt 5的各種子模塊的解釋也很好嗎?如果有人能夠指出任何關於這個主題的文字或文字,那也是很棒的。

+1

現在我得到了一個風滾草徽章。謝謝。 –

回答

0

我分享了這個相同的目標。我想「縮小」Qt,只構建一小部分庫/ DLL並省略其餘部分。

我確實成功了,至少在Mac OS X上。我認爲這種方法也適用於其他平臺。

我認爲訣竅是爲「配置」腳本找到某種排除標誌,但事實證明情況並非如此。

這裏是我做過什麼:

  1. 下載源分佈(在我的情況,QT-比比皆是 - 開源-SRC-5.1.1)。當然,提取一切。

  2. 編輯以下三個「專業」文件。這些文件是以qt特定的格式(但純文本)。他們是平臺無關的項目文件,Qt(通過qmake)用來生成makefile。

    • qtbase/SRC/src.pro
    • qtbase/SRC /插件/ plugins.pro
    • qtbase /示例/ examples.pro

我對「pro」文件所做的所有更改均爲刪除。我刪除了:dbus,ipc,network,qtconcurrent,sql,xml,sqldrivers,qdbusxml2cpp,qdbuscpp2xml,src_dbus,src_concurrent,src_sql,src_network

最後一部分聽起來很可怕。它確實不是。

pro文件包含模塊名稱,插件名稱和目錄名稱的列表。如何刪除(例如)所有與SQL相關的行似乎相當簡單。

第3步:

通常配置/製作/安裝。但是,請注意通過使 「模塊qtbase」 的說法:

./configure -prefix ~/my_test_dir/ 
make -j2 module-qtbase 
make -j2 module-qtbase-install_subtargets 

成功。這只是構建和安裝必需品(QtCore,QtGui,QtOpenGL,QtWidgets)並跳過所有支持的dylib,如QtConcurrent,QtMultimedia,QtSql和QtWebKit。

+0

我將不得不在某個時候嘗試。我很久以前放棄了:)我從來沒有想過要自己改變.pro文件。我在Windows 7上(目前是32位),並且在編譯過程中相對較遠。在某個時間點,30-45分鐘,與ICU的鏈接混亂並且製作過程停止。我從來沒有回到過去。也許我應該再試一次。 –

0

ICU可以靜態鏈接,您可以自定義它(請參閱文檔)以減小大小。默認情況下,數據也很大,我不知道你需要多少數據。您只能包含足夠的數據以使用一種語言運行。

只有答案的一部分。

+0

雖然謝謝。我以爲這個問題已經被遺棄和遺忘了。有關Qt 5.1中各個模塊的任何知識? –

+0

@ OleThomsenBuus不,對不起。我在ICU工作,並正在尋找ICU的問題。儘管如此,請參閱您得到的其他答案。 –

0

沒有必要禁用Qt模塊。每個使用Qt的應用程序都會決定使用哪些模塊並與之鏈接。僅基於控制檯的應用程序可能僅使用核心模塊。這就是您在Qt中創建Web服務時所使用的。