坛子里似乎已经有人
编译出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,添加
- 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软件
安装一样
- ./configure --prefix=/mingw
- make
- make install
3)
http://sourceforge.net/projects/libpng/files/zlib/下载zlib的源代码
- 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的源代码
- 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的源代码
- 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修改优化目标
- 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
然后分别用
测试一下,注意python后面的V是大写的
7)
http://site.icu-project.org/download下载ICU,然后和普通的Linux软件一样
- ./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命令行
- 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看一下到底有那些选项可以使用,然后再调整
然后
在编译webkit时会遇到
错误,提示一个makefile中925行不可识别。其实type nul>命令就是dos命令行创建空文件的命令,编译脚本调用msys的sh去解释当然解释不了。解决方法很简单,你自己手动创建那个空文件,然后把那行注释掉,在行首加一个#就行了。然后继续
你可能会问为什么不能一开始就修改好那个文件,然后再mingw32-make,那是因为这个文件是在make中生成的,不是一开始就有的,所以必须得等到时候才行
经过漫长的等待之后,终于make完了,再
大功告成
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,你就得自己下载源代码手动编译了