使用mingw编译完整Qt5的过程

坛子里似乎已经有人编译出Qt5了,不过大多有问题,不是缺少opengl就是缺少openssl,还有缺少webkit的,本文提供的仍然不能说是绝对完整的,不过相对以前的编译方法也完整了很多。这个方法编译出来的Qt5包含openssl、opengl和webkit

首先要准备开发环境,也就是Qt5的依赖软件包。Qt5在编译过程中需要依赖

network模块需要openssl,openssl又依赖zlib和gmp,gmp又依赖nasm,而这些软件包在编译时又依赖msys和mingw
编译脚本需要perl、python、ruby
webkit部分需要icu

先讲32位的

1)准备msys和mingw。

我使用的是niXman的套装
http://sourceforge.net/projects/mingwbuilds/?source=directory
国内的qp-gcc和pcxprj版本的mingw编译出来的软件不依赖libgcc_s_sjlj-1.dll,不过glibc的许可协议是LGPL的,静态链接原则上是违反LGPL的,而且他们的套装停留在4.6版本了,而最新的Qt5需要编译器支持C++11,需要4.7版的mingw,所以我就换成niXman的了

如果你水平够高,也可以按照
https://github.com/niXman/mingw-builds
制作自己的mingw包。因为你水平够高,所以楼主这里就不详细说了。反正我觉得人家制作好的已经足够了,如果要修改的话无非就是把glibc改成静态的,但是那样违反LGPL,所以楼主懒得改。

niXman的套装里面包含了msys,不过没有中文化
http://lscfinal.blog.163.com/blog/static/171469862201102113944397/
按照这个帖子,把msys的中文问题解决掉。同时该fstab把mingw挂载到msys的/mingw目录

如果你的计算机处于防火墙后面,修改.bashrc,添加

  1. export http_proxy='http://用户名:密码@服务器:端口'
    export ftp_proxy='http:// 用户名:密码@服务器:端口'

这样每次启动msys都会加载代理服务器设置

然后把mingw的bin和i686-w64-mingw32下的bin都加入系统PATH变量中。在我的电脑上点右键,在“系统属性里面”的“高级”选项卡,点下面的环境变量,PATH中各个目录以分号分隔

为了确保环境变量设置正确
gcc -v测试一下

2)http://www.nasm.us/
下载nasm的源代码,解压缩之后和常规的linux软件安装一样

  1. ./configure --prefix=/mingw
    make
    make install

3)http://sourceforge.net/projects/libpng/files/zlib/
下载zlib的源代码

  1. unzip zlib127.zip
    cd zlib-1.2.7
    make –f win32/Makefile.gcc
    cp libz.a libz.dll.a /mingw/i686-w64-mingw32/lib
    cp zlib.h zconf.h /mingw/i686-w64-mingw32/include
    cp zlib1.dll /mingw/bin

4)http://gmplib.org/
下载gmplib的源代码

  1. tar –jxvf gmp-5.0.5.tar.bz2
    cd gmp-5.0.5
    ./configure--prefix=/mingw/i686-w64-mingw32 --enable-shared --disable-static --disable-cxx
    make
    makecheckmake install

要注意gmp中C++的部分和msvcrt有冲突,所以必须要屏蔽掉,否则make check过不去

5)http://openssl.org/
下载openssl的源代码

  1. tar -zxvf openssl-1.0.1c.tar.gz
    cdopenssl-1.0.1c
    ./Configuremingw --prefix=/mingw enable-gmp experimental-jpake enable-krb5 enable-md2enable-rc5 enable-rfc3779 enable-shared experimental-store zlib-dynamic

修改Makefile,在EX_LIBS字段添加-lgmp,你也可以顺便把gcc编译参数也给改了,默认是i486优化的,你可以根据你自己的cpu修改优化目标

  1. make depend
    make
    make test
    makeinstall

http://qt-project.org/wiki/Building_Qt_5_from_Git
说明了Qt5的编译流程,不过说的不够详尽,楼主这里再解释一下

6)准备脚本解释器
http://strawberryperl.com/releases.html
下载绿色版的perl,因为perl在安装过程中仅参与安装脚本的解释和调用,不参与编译过程,所以64位和32位的用起来都一样,楼主用的是64位的。要注意Qt5的编译脚本对perl的依赖比之前4.x版本高的多,而且有明确要求版本高于5.14,而niXman套装msys里面自带的perl是5.8的,所以必须要升级。

下载完成后解压缩,把其中的perl目录单独提取出来,其他的目录都可以删掉,把perl下的bin加入系统PATH,而且一定要在msys的bin前面,或者干脆把msys/bin中的perl.exe改名,让系统只能找到草莓perl

niXman的mingw套装自带了python2.7.2,所以不需要再找了。只不过你需要把mingw目录下opt/bin加入系统PATH

http://www.rubyinstaller.org/downloads/
下载ruby,推荐绿色版。解压缩之后一样把里面的bin目录加入系统PATH

然后分别用

  1. perl -v
    python -V
    ruby -v

测试一下,注意python后面的V是大写的

7)http://site.icu-project.org/download
下载ICU,然后和普通的Linux软件一样

  1. ./configure --prefix=/mingw/i686-w64-mingw32
    make
    make install

8)终于到了Qt5了

http://qt-project.org/downloads下载Qt5的源代码,记得下载zip包,tar.gz包是给linux准备的,由于windows文件系统和linux的差异,tar.gz包里面有些文件在windows下解压缩时会有缺损。解压缩zip包

把源码中gnuwin32/bin加入系统PATH。其实这些工具仅仅在编译Qt5时才有用,过后就把它从PATH中移除吧。和niXman的msys中的工具相比,只多了一个gperf,你也可以到
http://gnuwin32.sourceforge.net/packages/gperf.htm
下载一个,然后放到系统PATH里面,楼主都是把它放到msys的bin目录下

如果你够变态,也可以到
http://www.gnu.org/software/gperf/
下载最新版的源代码,然后编译、安装再使用

前面的命令都是在msys命令行中完成的,接下来切换到cmd命令行

  1. configure -prefix your_install_dir -opensource -debug-and-release -opengl desktop -nomake-examples -nomake-demos

因为前面安装了ICU,所以系统会自动检测,发现ICU后会自动开启webkit编译选项,另外prefix是安装目录;-debug-and-release是为了开发需要;-opengl必须要设定为desktop,因为默认是es2的,而系统中如果没有安装angle会编译出错,楼主本人是搞桌面开发的,不用es2,所以没有经验;-nomake-examples和-nomake-demos可以大大节省编译时间,例子通常都不会有人去看的

其他的在4.x时代经常用到的参数,在5时代终于全部变成自动检测了,系统会自动检测zlib、openssl、PCRE、fontconfig等等

有必要提及的是Qt5的编译脚本默认开启了avx2指令集及更早的多媒体指令集,如果你的CPU不支持这么新的指令集,需要将其屏蔽掉

可以configure -h看一下到底有那些选项可以使用,然后再调整

然后

  1. mingw32-make

在编译webkit时会遇到错误,提示一个makefile中925行不可识别。其实type nul>命令就是dos命令行创建空文件的命令,编译脚本调用msys的sh去解释当然解释不了。解决方法很简单,你自己手动创建那个空文件,然后把那行注释掉,在行首加一个#就行了。然后继续

  1. mingw32-make

你可能会问为什么不能一开始就修改好那个文件,然后再mingw32-make,那是因为这个文件是在make中生成的,不是一开始就有的,所以必须得等到时候才行

经过漫长的等待之后,终于make完了,再

  1. mingw32-make install

大功告成

64位的问题要多一些,最重要的就是要在编译每一个库时添加-m64参数,还好niXman已经替我们解决了,他的64位包是默认添加-m64参数的,而他的32位包是默认添加-m32参数的

还有openssl编译时Configure的参数中的mingw要换成mingw64

楼主在编译webkit时遇到了缺文件的问题,而且一直也没找到解决方法,所以webkit组件只好先放下了,configure的时候加上-no-icu参数就可以不编译webkit,或者你也可以干脆把webkit目录删掉

要注意的是
http://qt-project.org/forums/viewthread/22883/
已经明确说明Qt-5.0.0中webkit对mingw的支持有问题,楼主已经很不容易了,也奉劝大家别再试了,等下一版Qt吧

不过没有webkit的话就不会自动编译qt-creator-2.6.1,你就得自己下载源代码手动编译了

jerryh 2012-12-22 22:31
 这个版本我反复试了几次不成功..等会再试试.
正在用 RubenVB personal builds 编译,这个好象速度要快不少

其它GCC版本总是编译出错.,不用再试了

roywillow 2012-12-22 22:33
膝盖已烂,给跪……
network不用openssl也可以编译通的,所以我觉得那个“需要”不太妥当哦。另外这里:
http://qt-project.org/doc/qt-5.0/qtnetwork/ssl.html
有这么一句话:

By default, an SSL-enabled Qt library dynamically loads any installed OpenSSL library at run-time. However, it is possible to link against the library at compile-time by configuring Qt with the -openssl-linked option.

我可不可以理解为,Qt在编译的时候不一定需要openssl库存在,它可以在运行的时候探测,并且依然能使用ssl的功能?但是不清楚如果编译时没有装openssl,那么这个Qt是不是SSL-enabled的呢?
至于webkit,还是再观望一段时间吧
另外你的Qt5是在msys下编译的?

jerryh 2012-12-22 22:34
目前用MinGW编译是真心地不容易啊.
roywillow 2012-12-22 22:36
我觉得我有必要去学着接受用msvc编译器了,并且用官方的预编译库……
不过一直没搞懂msvc是只带着个编译器呢,还是连winsdk和dxsdk都带上了呢……
XChinux 2012-12-22 23:57
引用第4楼roywillow于2012-12-22 22:36发表的 回 3楼(jerryh) 的帖子 :
我觉得我有必要去学着接受用msvc编译器了,并且用官方的预编译库……
不过一直没搞懂msvc是只带着个编译器呢,还是连winsdk和dxsdk都带上了呢…… 

似乎默认安装VCExpress,只带windows sdk,没有dxsdk吧?
msvc已占领了windows平台,bcc/icc/gcc越来越没地位了。

呆呆很呆 2012-12-23 09:58
那么多编译出来用不着 所以两条命令
configure -no-opengl
mingw32-make module-qtbase
就能编译出我需要的库来了
(虽说PrintSupport库连接失败 但是这后边编译的我只需要platforms/windows cd进去qmake mingw32-make就OK了)
XChinux 2012-12-23 11:28
以前也用mingw来着,可是在windows下搞开发,似乎免不了要用到一些第三方库,而那些库有许多是不提供mingw支持的,于是乎只能转到msvc了,我在当时主要是因为要用到ICE,而ICE对mingw支持不佳,才转到msvc的.我个人觉得,既然官方未出mingw编译包,那肯定是有些现在还未解决好的问题,所以还是等官方出mingw编译包吧。
roywillow 2012-12-23 13:38
引用第7楼XChinux于2012-12-23 11:28发表的  :
以前也用mingw来着,可是在windows下搞开发,似乎免不了要用到一些第三方库,而那些库有许多是不提供mingw支持的,于是乎只能转到msvc了,我在当时主要是因为要用到ICE,而ICE对mingw支持不佳,才转到msvc的.我个人觉得,既然官方未出mingw编译包,那肯定是有些现在还未解决好的问题,所以还是等官方出mingw编译包吧。 

总感觉msvc不绿色
我偶尔会用同学的电脑来跑编译,速度快,但是要让我在别人的电脑上装msvc我坚决不干……
mingw直接copy过去就能用,并且winsdk、dxsdk之类的库都齐全,msvc没这方便性吧

http://www.qtcn.org/bbs/simple/?t52162.html

使用mingw编译完整Qt5的过程(使用了niXman的msys套装)good的更多相关文章

  1. Linux内核编译完整过程

    Linux内核编译完整过程 通过网上的资料我自己的实际内核编译,我把对Linux内核编译的过程写在这里,也许对其他的Linux爱好者的编译学习有些帮助,其中很大部分是网上的资料,另外就是我在实际编译过 ...

  2. QT中使用MinGW 编译的protobuf库--包含库的生成和使用

    QT中使用MinGW 编译的protobuf库--包含库的生成和使用 0前言 1准备工作 2生成protobuf库文件 3在QT中测试protobuf的使用 4结语 0前言 最近要在QT中使用prot ...

  3. 手把手教你在Windows下使用MinGW编译libav(参考libx264的编入)

    转自:http://www.th7.cn/Program/cp/201407/242762.shtml 手把手教你在Windows下使用MinGW编译libav libav是在Linux下使用纯c语言 ...

  4. MingW编译virt-viewer

    在http://www.spice-space.org/download.html可以下载到windows版本的virt viewer virt-viewer-x86-0.5.7.msi和virt-v ...

  5. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

  6. VS2008编译器编译出来的文件比mingw编译的要几乎小一半

    为什么要在VS2008中使用QT静态编译呢?很简单,因为VS2008编译器编译出来的文件比mingw编译的要几乎小一半. 好了现在我们来做些准备工作,VS2008自然要安装的,然后打上SP1的补丁.然 ...

  7. 在Windows环境下使用MinGW编译Qt 4.8.6

    1.修改环境变量工具推荐:Rapid Environment Editor.官网:http://www.rapidee.com/ 修改前请先备份当前的环境变量.然后: (1)检查系统变量path,删除 ...

  8. 使用Mingw编译wxSqlite3-3.0.5

    最近在学习wxWidgets,而且官方也出了3.0版本,貌似还不错的样子,准备做个小程序来练手.中间需要用到数据库看到很多人推荐wxSqlite3就去下来看看,以下是我使用TDM-GCC 4.8.1( ...

  9. Mingw编译DLib

    Mingw编译DLib 因为机器上安装了qt-opensource-windows-x86-mingw530-5.8.0,所以准备使用其自带的mingw530来编译DLib使用. 因为DLib使用CM ...

随机推荐

  1. Java背景

    Java语言是美国Sun公司(Stanford University Network),在1995年推出的高级编程语言 2009年Oracle甲骨文公司收购Sun公司

  2. Android Studio运行main方法

    这样想做一些测试就很简单了 实现步骤如下: 1.当前项目右键->new->Module->Java Library 2.修改你创建javaLib的build.gradle文件 改为( ...

  3. 如何在spring quartz类中拿到ServletContext

    ContextLoader.getCurrentWebApplicationContext().getServletContext() web.xml里加个: <listener> < ...

  4. linux下安装sqlite3

    1.介绍:sqlite3是linux上的小巧的数据库,一个文件就是一个数据库.2.安装:  要安装sqlite3,可以在终端提示符后运行下列命令:  sudo apt-get install sqli ...

  5. Android开发之 shape的使用

    android shape的使用 shape用于设定形状,能够在selector,layout等里面使用,有6个子标签,各属性例如以下: <?xml version="1.0" ...

  6. Managing remote devices

    A method and apparatus for managing remote devices. In one embodiment of the present invention, ther ...

  7. JDBC数据源DBCP源代码情景分析

    在之前的一篇博文从JDBC到commons-dbutils 中,我曾经写到,对于获取数据库连接,有一个解决方案,那就是数据源.业界用到的比较普遍的开源数据源解决方案有很多,DBCP是其中一种,今天,我 ...

  8. WPF中的可视化对象(Visual)

    原文:WPF中的可视化对象(Visual) 这是MSDN对Visual的解释:Visual class:Provides rendering support in WPF, which include ...

  9. WPF中使用AxisAngleRotation3D实现CAD的2D旋转功能

    原文:WPF中使用AxisAngleRotation3D实现CAD的2D旋转功能       对于CAD图形来说,3D旋转比较常用,具体实现方法在上篇文章<WPF中3D旋转的实现 >中做了 ...

  10. 【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]

    原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[Embossed] Embossed(浮雕效果)          浮雕效果主要有两个参数:Amount和Wid ...