mingw编译Qt5正式版[亲测可用]

转载 2015年07月07日 11:27:58

http://blog.chinaunix.net/uid-693168-id-3446114.html

建议所用软件均按以下版本,编译过程中不会出现fail,QtCreator可以使用官方版,慎用ShadowBuild

MinGW             tdm-gcc-4.7.1-2.exe(mingw32,里面的各种工具较新)   
Perl                   ActivePerl-5.16.1.1601-MSWin32-x86-296175.msi
ICU                   icu4c-49_1_2-src(需要自行编译)
Python              python-2.7.0.msi(编译webkit时,3.3会出错)
Ruby                 rubyinstaller-1.9.3-p327.exe(编译webkit时需要)

Qt                     qt-everywhere-opensource-src-5.0.0.tar.gz
QtCreator        qt-creator-2.6.1-src.zip 
-------------------------------------------------------------------------------------------------------
Qt5配置编译安装

从控制台进入新的QT安装目录

设置环境变量
  1. set PATH=%PATH%;D:/icu/bin;D:/icu/lib;D:/Python33;D:/Perl/bin;D:/MinGW32/bin;D:/Ruby/bin
  2. set INCLUDE=%INCLUDE%;D:/icu/include
  3. set LIB=%LIB%;D:/icu/lib
配置命令
  1. configure -prefix %CD%\qtbase -opensource -debug-and-release -nomake tests -nomake examples -opengl desktop -no-vcproj -no-iwmmxt -no-cetest
  2. 如果要进行静态编译请加上 -static
  3. --prefix 参数,指定软件安装目录
编译命令
  1. mingw32-make -i -k 2>err.log
  2. 说明:
    -i            忽略错误
    -k            某些目标不能达成时仍然继续进行
    2>err.log    将发生的错误输出到当前目录的err.log文件中
    在进行最后一步之前查看err.log,只要错误不影响正常使用就可以进行最后一步,否则需要进行错误排除,排除之后再次运行上面这个命令
安装
  1. mingw32-make install
后期工作
要正常使用Qt还需要在系统或者编译工具中设置环境变量
  1. PATH            D:/icu/bin;D:/icu/lib

mingw的一些可能用到的参数
-jN  多任务进行

-------------------------------------------------------------------------
QtCreator配置编译安装(需要qmake)

准备:
QtCreator源码路径:D:/Qt/qt-creator-2.6.1-src
QtCreator编译目录:D:/Qt/qt-creator-2.6.1
QtCreator安装目录:D:/Qt/qt-creator

配置环境变量
  1. set PATH=%PATH%;D:/icu/bin;D:/icu/lib;D:/Python;D:/Perl/bin;D:/MinGW32/bin;D:/Ruby/bin
  2. set path=%path%;d:/qt/5.0.0/qtbase/bin
  3. set INCLUDE=%INCLUDE%;D:/icu/include;D:/qt/5.0.0/qtbase/include
  4. set LIB=%LIB%;D:/icu/lib;D:/qt/5.0.0/qtbase/lib
    将源码包解压到源码目录,新建编译目录,从控制台进入编译目录,
设置好Qt环境变量

生成makefile
  1. qmake "QT_PRIVATE_HEADERS= D:/Qt/5.0.0/qtbase/include" D:/Qt/qt-creator-2.6.1-src/qtcreator.pro
编译
  1. mingw32-make -i -k 2>err.log
打开err.log查看错误,如果不是致命错误则进行下一步

  1. 这是其中一个可能发生的错误,原因是Qt5中这个模块declarative已经升级
  2. Project ERROR: Unknown module(s) in QT: declarative
安装
  1. mingw32-make install
安装完毕后,删除掉编译目录里面的src即可(删不删都不影响使用,但是src很大)
QtCreator仍在编译过程中。。。。。。。。。。。。
---------------------------------------------------------------------------------------------------
没有configure.exe的解决方法 【已测有效】
注释掉qtbase\configure.bat中的一行文字
  1. if not exist %QTSRC%\.gitignore goto sconf
前面加上::注释掉 就是修改为
  1. ::if not exist %QTSRC%\.gitignore goto sconf
回到安装目录运行配置命令
---------------------------------------------------------------------------------------------------
必须注意的bug

来源:https://bugs.webkit.org/show_bug.cgi?id=100592
----------------------------------------------------在编译过程中,链接QtWebKitWidgetsd5.dll (位于QtWebKit中)的时候可能会出现:
undefined reference to JSC::JSCell::classInfo() const.
这是个致命错误,会导致无法编译无法继续进行
解决方法:Alright, I was able to fix this locally by merging the content of JSDestructibleObject.h (which defines JSCell::classInfo()) into JSObject.h .
-------------------------------------------------------
the input line is too long/输入行太长
解决方法
尽量缩短qt5所在路径,使用TCC LE 13.0代替cmd.exe可以解决问题的一半,另一半需要自己动手写批处理,批处理尽量分几次写,因为批处理大小似乎也有限制。

我是在编译到Qt5WebKitWidgets的时候遇到这个问题的,批处理如下,需要根据实际情况更改文件中的路径,Qt5WebKitWidgets为release部分,Qt5WebKitWidgetsd为debug部分。
---------------------------------------------------------------------------------------------------
编译icu【需要msys】
【转自官方http://qt-project.org/wiki/Compiling-ICU-with-MinGW

使用 MinGW编译ICU

Qt 5 / QtWebkit 需要ICU, which MinGW distributions do not ship.

预编译包

The ICU 项目官方网站 [site.icu-project.org] 为32和64位系统都提供了预编译库下载。但都只是MSVC2010运行环境下的。

按自己的需要进行编译 如何编译
  • 打开msys,进入icu源码包路径
  • $ cd icu/source

设置mingw路径,如

  1. $ export PATH=/c/Mingw-builds-32/bin:$PATH
    【这一步,mingw的路径要按实际的改动】

为 MinGW-w64打上补丁:

  1. $ patch -Np3 -i ../changeset_icu_trunk_source_tools_toolutil_pkg_genc.c_31770.diff

运行 configure && build:

  1. $ ./runConfigureICU MinGW --prefix=$PWD/../dist

最后, run make && make install

  1. $ make && make install
使用
将bin, include, lib路径添加到编译环境的环境变量中,比如在cmd.exe下:

  1. C:\> set PATH=%PATH%;C:\icu\dist\bin;C:\icu\dist\lib
  2. C:\> set INCLUDE=%INCLUDE%;C:\icu\dist\include
  3. C:\> set LIB=%LIB%;C:\icu\dist\lib

此时运行Qt的configure.exe,ICU便能够被检测到,and Qt links against the libraries.

关于ICU4C 5.0的bug

gcc 4.7.2/MinGW环境下,ICU4C 有个bug会导致编译失败 : http://bugs.icu-project.org/trac/ticket/9728

---------------------------------------------------------------------------------------------------


====================折腾过程 ================================
【以下为个人记录,仅作备忘】 
12月19日digia发布了QT5正式版,遗憾的是没有发现mingw版本,得自己动手。
下载源码   qt-everywhere-opensource-src-5.0.0.tar.gz
进行各种常规配置,包括安装perl,phony
尝试 configure -h 
竟然发现没有configure.exe
倒是在qtbase中找到了源码,限于水平有限,暂时编译不出来
然后经过各种折腾,发现把4.8.3的configure.exe拷贝到base下面可以运行,

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    尽管经过各种修改,通过了configure的阶段(具体过程在此不表),但是在进行mingw32-make的时候会出现找不到qmodule.pri的情况,打开mkspace文件夹,发现只生成了qconfig.pri,看来想用老版本的configure.exe蒙混过关是行不通的,但是以上努力并没有白费,首先是生成了许多应有的文件,什么include,/qtbase/bin下面也有了qmake.exe。经过继续折腾,得到了5.0.0版本的configure.exe,过程如下

----------------------------------------------------------------------------------------------
将4.8.3的configure.exe复制到5.0.0的qtbase下面
将修改过的private文件夹复制到%QTDIR%\qtbase\include\QtCore目录
将修改过的qlibraryinfo.cpp 复制到\qtbase\src\corelib\global覆盖原文件
(修改方法附在后面)

从控制台进入QT5.0.0安装目录
set QTDIR=%CD%
Set path=%path%;D:\Perl\bin;D:\Python33;D:\mingw\bin;

4.8.3需要指定平台,若使用参数方式-platform配置完毕后,会提示%QTDIR%\qtbase\tools\configure\下面缺少qmake.conf,故使用环境变量方式
set QMAKESPEC=D:\Qt\5.0.0\qtbase\mkspecs\win32-g++

配置命令
configure -prefix %CD%\qtbase -opensource -fast


重新运行配置命令
运行结束后,进入
%QTDIR%\qtbase\bin\
应该已经生成了qmake.exe

删除%QTDIR%\qtbase\configure.exe

将%QTDIR%\qtbase\bin\加入到path
Set path=%path%;%QTDIR%\qtbase\bin\;
从控制台进入
%QTDIR%\qtbase\tools\configure\

qmake
出现
D:/5.0.0/qtbase/.qmake.conf:1: Cannot find feature qt_build_config
Project ERROR: Cannot load qmodule.pri!

打开\qtbase\qmake.conf
去掉load(qt_build_config)


qmake
mingw32-make install

运行完毕之后会在\qtbase\下面生成新的configure.exe
备份这个configure.exe
将整个qt5.0.0目录删除,重新解压源码包,将configure.exe拷贝到qtbase中,运行configure进行配置

---------------------------------------------------------------------------------------------------
使用4.8.3版本的configure.exe配置5.0.0之前所需修改的文件:
1、private文件夹:
以4.8.3目录下的configure.exe对5.0.0进行配置的过程中会提示找不到
private/XXXXX.h
解决方法如下:
进入%QTDIR%\qtbase\include\QtCore\5.0.0\QtCore\private
会发现很多头文件,打开任意一个头文件都只有一行
现在要做的是把
../../../../../src/3rdparty/harfbuzz/src/harfbuzz-gpos-private.h"
改为
../../../src/3rdparty/harfbuzz/src/harfbuzz-gpos-private.h"
一共有一百多个,建议使用批处理,修改完毕后备份,待用
(会进行库文件路径设置的可以通过设置include路径达到相同效果,但是我进行了各种设置,始终没有成功)

2、qlibraryinfo.cpp
使用使用4.8.3版本的configure.exe配置5.0.0时还会出现另一个错误
提示D:\Qt\5.0.0\qtbase\src\corelib\global\qlibraryinfo.cpp中
找不到qt_configure_prefix_path_strs定义

而同目录下的qconfig.cpp对这个变量进行了定义,
static const char qt_configure_prefix_path_str       [512 + 12] = "qt_prfxpath=D:\\Qt\\5.0.0\\qtbase";
前者比后者多一个s,不知道是不是写错了,
qconfig.cpp 是自动生成的,所以只能在提示出错的cpp文件中进行修改

打开D:\Qt\5.0.0\qtbase\src\corelib\global\qlibraryinfo.cpp
所有qt_configure_prefix_path_strs
改为qt_configure_prefix_path_str

qt_configure_prefix_path_str[loc] + 12;
改为qt_configure_prefix_path_str+loc + 12;
因为从上下文来看,需要的是一个char* 的指针
修改完毕后备份待用
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
一些问题
配置时如果不加-fast似乎会有点小问题

编译过程中出现乱码: 删除mingw/share/locale目录下的中文语言文件
mingw32-make 时出现 unrecognized command line option \"-fno-keep-inline-dllexport\"  
表示mingw版本太低

提示Cannot find feature qt_build_config
解决方法:set QMAKEFEATURES=D:\Qt\5.0.0\qtbase\mkspecs\features


编译到webkit可能会出现
process_begin: CreateProcess(null,ruby XXXXXX)  failed. make (e=234)
安装ruby并将其加入到path中可解决问题,但是发生问题的源头据说是mingw版本太低(准确说是其中gcc版本太低)
++++++++++++++++++++++++++++++++++++++++++++++++++
添加Icu支持
这个是从readme看来的,暂时不知道有什么用处,从官网下载
解压到任意目录
将其中的include和lib设置到环境变量include和lib中,然后进行configure,qt就可以有mcu支持
+++++++++++++++++++++++++++++++++++++++++++++++++++++

Qt学习历程(一):Qt5.5.1(mingw)静态编译步骤

先说下本文使用的软件和环境(本人才疏学浅,如有不严谨的地方请轻喷)。这边教程需要一定的Qt使用知识,如果是小白,请移步。本人使用WIN7 64位旗舰版系统。安装的Qt是5.5.1 mingw版本,具体...
  • hey545521859
  • hey545521859
  • 2015年10月19日 11:50
  • 1796

maven 阿里云 国内镜像 中央仓库 亲测可用

众所周知,在墙内开发很头疼的一件事就是Maven仓库的连接速度太慢。虽然对于很多互联网企业和大中型软件公司,建个镜像是分分钟的事。但对于个人开发者和小公司来说,确实是个问题。之前有一阵子开源中国有提供...
  • PRIMEZPY
  • PRIMEZPY
  • 2018年01月09日 21:44
  • 48

QT5.3.2+mingw静态编译(生成exe大约14M)

在网上找了很久的QT静态编译方法,基本参考:http://www.baidu.com/link?url=3JiyMFpMziH5Qdw73NVnTg1wPb6JT9LywvOzCE6FAOE-LrtE...
  • wj066000
  • wj066000
  • 2014年12月30日 15:07
  • 1694

Qt5.7.1-mingw530_32与opencv在win7 64位下编译环境的搭建

版本Qt版本:qt-opensource-windows-x86-mingw530-5.7.1 opencv版本:opencv-3.2.0-vc14 系统:win7 64位 CMake:cmak...
  • jayandchuxu
  • jayandchuxu
  • 2017年03月14日 09:55
  • 2493

windows下的GNU编译环境Cygwin和MinGW

转载 http://www.cnblogs.com/cjt-java/archive/2013/05/26/3100133.html 感谢博主。 一般我们开发windows下的程序都是使用VC,V...
  • u013259174
  • u013259174
  • 2016年11月22日 14:45
  • 447

springmvc - 亲测可用

原文地址:http://www.cnblogs.com/notDog/p/4735334.html 创建了一个空的SpringMVC项目,Tomcat可以正常启动,但是运行的时候,始...
  • liuao107329
  • liuao107329
  • 2017年03月24日 15:52
  • 106

亲测可用的NS2对"1. AODV" "2. DSDV" "3. DSR" 的路由模拟

set a 1 while {$a == 1 } { puts "Enter the Routing Agents in mobile networking" puts "1. AODV"  ...
  • jianghuihong2012
  • jianghuihong2012
  • 2014年06月13日 16:58
  • 1297

使用Qt(mingw)编译FreeType为 .a 静态库

选择Qt来做工具的UI,但是因为安装的是mingw版本的Qt,之前在VS中使用的lib静态库这一下就派不上用场了,网上搜索到可以用工具把 lib 文件转换成 .a 文件,但是自己尝试后没有生成成功,加...
  • cp790621656
  • cp790621656
  • 2015年08月26日 00:59
  • 1583

jquery的一些正则,亲测可用

$.extend($.fn.validatebox.defaults.rules, {    //验证中文   CHS:{ validator:function(value){ return ...
  • oceanyang520
  • oceanyang520
  • 2014年03月20日 00:39
  • 278

GPUImageSDK 集成 亲测可用

GPUImage 是一个开源的图像处理库,提供了非常多的滤镜效果来加工图片。GPUImage 并不像一般的第三方库可以直接拖入到工程中使用,而是需要先在本地编译,然后将编译后的文件拖入到工程中使用。配...
  • qq_29846663
  • qq_29846663
  • 2016年12月17日 15:53
  • 920
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mingw编译Qt5正式版[亲测可用]
举报原因:
原因补充:

(最多只允许输入30个字)