MinGW下靜態編譯、連接Qt 5.0

本文討論的將是MinGW之上的靜態編譯 ,而且將拋開萬年難伺候的QtWebkit進行編譯。

1、編譯Qt 5.0

與Qt 4.x不一樣的地方:

一、Qt 5.0比以往相比,須要有perl環境。所以要在你的環境變量中添加perl。

二、configure當中去除了一些參數,好比no-webkit,同時又添加了一些,好比icu。

三、Webkit和QtCore都須要ICU。ICU是一個處理unicode的庫,若是你沒有準備,webkit的編譯自動跳過,core的編譯使用其它方法避開ICU。

四、因爲QPA的存在,與平臺相關的部分被抽象成了插件,這個後面再說。

五、默認啓用了ANGLE做爲OpenGL 和DirectX之間的橋樑,若是你沒有準備ANGLE,須要額外的-opengl desktop參數

六、默認支持C++11。基於此,推薦使用支持C++11的編譯器。我這裏使用的是TDM的32位版本,有興趣的能夠在這裏找到: http://tdm-gcc.tdragon.net/



靜態編譯Qt最基本的須要將gcc的幾個dll變成靜態連接,由於我使用了TDM,因此沒有這方面的後顧之憂,若是你使用原始的gcc,是須要修改mkspecs中的make.conf的,給gcc傳入參數-static -static-libgcc的。

同時也請注意,若是你須要一同編譯debug版本,不要編譯靜態的。

我所使用的configure:

configure -release -opensource -qmake -prefix "..\qt5\qt5-x86-static" -c++11 -platform win32-g++ -qt-zlib -qt-libpng -qt-libjpeg -qt-style-windowsxp -qt-style-windowsvista -nomake tests -nomake demos -nomake examples -opengl desktop

2、靜態連接

Qt 5.0從新翻修了插件部分,而且修改了部分宏的做用,以及上面說起的第4點。所以,和Qt 4.x的連接有些不一樣,咱們須要在本身的pro當中這樣寫:

CONFIG+=static
static{
        QTPLUGIN+=qwindows qico
        DEFINES+=QT_PLUGIN_STATIC_LINK
        LIBS+=-L"$(QTDIR)/plugins/platforms"
        LIBS+=-L"$(QTDIR)/plugins/imageformats"
        message("Staticbuild.")
}


這裏說明一下。這個qmake片斷只在static時候執行。由於前面特意寫了CONFIG+=static的關係,這裏的static{}才得以執行。QTPLUGIN宏引入兩個插件,這使得這兩個庫將被歸入連接;DEFINES定義了一個宏,這個宏咱們須要在代碼 中用到;LIBS兩行分別引入兩個插件庫的路徑;最後一行是個提示語。

如今,打開main.cpp或者新建一個cpp,寫入以下內容:

#ifdefQT_PLUGIN_STATIC_LINK
#include<QtCore/QtPlugin>
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin);
Q_IMPORT_PLUGIN(QICOPlugin);
#endif
注意,這裏就是和Qt 4.x最大的不一樣。原有的Q_IMPORT_PLUGIN宏須要的是插件名,而從Qt5開始則變成了插件的類名。另外這裏的分號是我額外加上的,不加也能夠,但Qt Creator會提示有問題。

這裏面的qwindows對應的就是QWindowsIntegrationPlugin,而qico對應的則是QICOPlugin。

如今程序應該能夠正常連接、運行了。

3、參考

http://www.formortals.com/build- ... intel-gcc-compiler/
http://www.formortals.com/how-to-statically-link-qt-4/
http://lists.qt-project.org/pipe ... 12-July/000401.html
https://bugreports.qt-project.org/browse/QTBUG-24496
https://github.com/lordmulder/La ... eff8bc03a2eff2f4111
https://blog.qt.digia.com/blog/2 ... -library-with-qt-2/
相關文章
相關標籤/搜索