mingw编译Qt5正式版[亲测可用]
2012-12-21 05:08:58
分类: C/C++ 每一段文字都是经过这5天以来辛苦测试得来的经验总结,如需转载,请注明出处 建议所用软件均按以下版本,编译过程中不会出现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安装目录 设置环境变量
配置命令
编译命令
在进行最后一步之前查看err.log,只要错误不影响正常使用就可以进行最后一步,否则需要进行错误排除,排除之后再次运行上面这个命令 安装
后期工作 要正常使用Qt还需要在系统或者编译工具中设置环境变量
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 配置环境变量
将源码包解压到源码目录,新建编译目录,从控制台进入编译目录, 设置好Qt环境变量 。 生成makefile
编译
打开err.log查看错误,如果不是致命错误则进行下一步
安装
安装完毕后,删除掉编译目录里面的src即可(删不删都不影响使用,但是src很大) QtCreator仍在编译过程中。。。。。。。。。。。。 --------------------------------------------------------------------------------------------------- 没有configure.exe的解决方法 【已测有效】 注释掉qtbase\configure.bat中的一行文字 将
前面加上::注释掉 就是修改为
回到安装目录运行配置命令 ---------------------------------------------------------------------------------------------------
必须注意的bug
来源:https://bugs./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:///wiki/Compiling-ICU-with-MinGW】 使用 MinGW编译ICU Qt 5 / QtWebkit 需要ICU, which MinGW distributions do not ship. 预编译包 The ICU 项目官方网站 [site.] 为32和64位系统都提供了预编译库下载。但都只是MSVC2010运行环境下的。 按自己的需要进行编译
设置mingw路径,如
为 MinGW-w64打上补丁:
运行 configure && build:
最后, run make && make install
将bin, include, lib路径添加到编译环境的环境变量中,比如在cmd.exe下:
此时运行Qt的configure.exe,ICU便能够被检测到,and Qt links against the libraries. 关于ICU4C 5.0的buggcc 4.7.2/MinGW环境下,ICU4C 有个bug会导致编译失败 : http://bugs./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路径达到相同效果,但是我进行了各种设置,始终没有成功) 使用使用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可能会出现
++++++++++++++++++++++++++++++++++++++++++++++++++ 添加Icu支持 这个是从readme看来的,暂时不知道有什么用处,从官网下载 解压到任意目录 将其中的include和lib设置到环境变量include和lib中,然后进行configure,qt就可以有mcu支持 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 若文中有误,请与我联系,以便及时更正Q289512125 |
|