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/
相关文章
相关标签/搜索