标题:MinGW下静态编译、链接Qt 5.0【妈妈再也不担心插件问题了】
作者:mewjerry
日期:2012-12-26 23:12
内容:
本文讨论的将是MinGW之上的静态编译,并且将抛开万年难伺候的QtWebkit进行编译。同时感谢Roywillow大神的指点~
一、编译Qt 5.0
与Qt 4.x不同的地方:
1、Qt 5.0比以往相比,需要有perl环境。因此要在你的环境变量中添加perl。
2、configure当中去除了一些参数,比如no-webkit,同时又添加了一些,比如icu。
3、Webkit和QtCore都需要ICU。ICU是一个处理unicode的库,如果你没有准备,webkit的编译自动跳过,core的编译使用其它方法避开ICU。
4、由于QPA的存在,与平台相关的部分被抽象成了插件,这个后面再说。
5、默认启用了ANGLE作为OpenGL和DirectX之间的桥梁,如果你没有准备ANGLE,需要额外的-opengl desktop参数
6、默认支持C++11。基于此,推荐使用支持C++11的编译器。我这里使用的是TDM的32位版本,有兴趣的可以在这里找到:http://tdm-gcc.tdragon.net/
静态编译Qt最基本的需要将gcc的几个dll变成静态链接,因为我使用了TDM,所以没有这方面的后顾之忧,如果你使用原始的gcc,是需要修改mkspecs中的make.conf的,给gcc传入参数-static-libgcc -static-libstdc++的。
同时也请注意,如果你需要一同编译debug版本,不要编译静态的。
我所使用的configure:
configure -release -static -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
二、静态链接
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两 ..
#1 [roywillow 12-26 23:19]
给老伙计顶一个
你可以再说一下那两行LIBS是因为插件的.a所在的文件夹没有自动添加到搜索路径中去
#2 [roywillow 12-26 23:25]
以及……我还是很好奇assistant之类的tools是怎么实现静态编译的……
#3 [realfan 12-27 10:00]
顶一下。
我也是昨天才成功完成静态编译的,折腾了好几天。MingGW的版本很重要,最后用roywillow说的rubenvb才搞定。
#4 [realfan 12-27 10:53]
忍不住再回来顶一下。
楼主5.0的插件处理解决了我的困扰
#5 [mewjerry 12-27 12:52]
引用第2楼roywillow于2012-12-26 23:25发表的:
以及……我还是很好奇assistant之类的tools是怎么实现静态编译的……
它貌似自动生成了一个cpp来导入插件