经历了多次延期后,在3月16号,Qt发布了5.6.0版本(全面支持高DPI无疑是一个亮点),从5.6.0版本开始,Qt直接移除了webkit模块,让webengine作为其替代选择,不过webengine无法为WinXP编译(参考:https://bugreports.qt.io/browse/QTBUG-49900)。如果你还有用户仍在WinXP上使用webkit,Qt官方给的解决方案是你可以自己编译webkit。当然编译一向都不是一个很容易的东西,笔者在编译过程中也出现了很多问题,不过最后还是都得以解决。这篇文章包含笔者的一些经验,希望能有所帮助。

一、准备

  1. Visual Studio 2013 Ultimate(Express版没有测试)
  2. Qt 5.6.0 源代码 qt-everywhere-opensource-src-5.6.0
  3. Windows SDK 7.1A(一般VS自带)
  4. openssl-1.0.2g 源代码
  5. The Netwide Assembler(nasm-2.12.01-win32)(可选,编译openssl所需)
  6. ActivePerl
  7. Python-2.7.11(https://www.python.org/downloads/)
  8. Ruby(编译webkit所需)
  9. ICU4C 56.1 源代码(编译webkit所需)
  10. Git(用于获取webkit源代码)
  11. jom(可选,用于代替nmake,编译时能利用所有CPU资源)

安装ActivePerl,Python,Ruby,Git这4个工具的时候,注意勾选将可执行文件路径添加到PATH选项,避免之后手动添加。

Tips:如果笔者推荐的某些下载链接无法打开,请使用VPN或代理之类的X墙工具。

 

二、动态编译openssl

  1. 解压openssl-1.0.2g.tar.gz到C:\Qt\openssl-1.0.2g
  2. 解压nasm-2.12.01-win32.zip到C:\Qt\nasm-2.12.01(可选)
  3. 在C:\Qt创建一个空目录openssl_shared,编译的最终结果将存放到这个目录
  4. 打开VS2013的x86命令提示工具(这样就不用手动设置VC编译器的环境变量)
  5. set PATH=C:\Qt\nasm-2.12.01;%PATH% (设置NASM的环境变量,如果没有执行第二步操作,可以忽略)
  6. cd C:\Qt\openssl-1.0.2g
  7. perl Configure VC-WIN32 --prefix=C:\Qt\openssl_shared(如果忽略第二步,增加no-asm选项)
  8. ms\do_nasm(如果忽略第二步,执行:ms\do_ms)
  9. 手动编辑ms/ntdll.mak,在21行CFLAG中增加选项 /MP -D_USING_V110_SDK71_ (表示让cl用多线程编译和使用Windows SDK 7.1A)
  10. 修改35行LFLAGS和52行的MLFLAGS,把/subsystem:console改为/subsystem:console",5.01" (支持WinXP)
  11. 保存,回到CMD,执行:nmake -f ms/ntdll.mak
  12. 编译完成后,执行:nmake -f ms/ntdll.mak install,安装到openssl_shared目录。
 

三、动态编译ICU

 

看了icu的readme之后发现,icu提供了一个VS2010的解决方案,所以我们就直接用VS2013打开这个解决方案编译即可,具体步骤如下:

 
  1. 解压icu4c-57_1-src.zip到C:\Qt\icu
  2. 用VS2013打开icu\source\allinone\allinone.sln,并升级所有项目。
  3. 在解决方案资源管理器中针对每一个项目(除了makedata这个项目):配置属性->常规->平台工具集,选择“Visual Studio 2013 - Windows XP (v120_xp)”
  4. 在解决方案资源管理器中,右键解决方案->生成解决方案(Debug和Release都生成一次)。
 

四、获取webkit源代码

 

qt-everywhere-opensource-src-5.6.0.7z里面已经没有webkit的源代码了,笔者刚开始尝试去下载5.5.1版本的webkit源代码,但是在编译过程中出现了一个链接错误:LINK : fatal error LNK1104: cannot open file '\OPT:REF.obj',经过一番查找发现是webkit配置文件中的一个转义错误,参考:https://bugreports.qt.io/browse/QTBUG-50607,评论中指出已经在git修复。所以:)还是用git获取源代码吧:

  1. 打开CMD,转到C:\Qt\qt-everywhere-opensource-src-5.6.0(注意设置Git的环境变量)
  2. 执行:git clone git://code.qt.io/qt/qtwebkit.git
  3. 等待源代码下载完毕,如果出现网络错误,使用VPN再试试
  4. 执行:git checkout 5.6.0
 

五、编译Qt 5.6.0

  1. 解压qt-everywhere-opensource-src-5.6.0.7z到C:\Qt\qt-everywhere-opensource-src-5.6.0
  2. 打开VS2013的x86命令提示工具,执行以下命令:
  3. SET _ROOT=C:\Qt\qt-everywhere-opensource-src-5.6.0
  4. SET PATH=%_ROOT%\qtbase\bin;%_ROOT%\gnuwin32\bin;%PATH%
  5. SET QMAKESPEC=win32-msvc2013
  6. SET _ROOT=
  7. SET INCLUDE=C:\Qt\icu\include;%INCLUDE%
  8. SET LIB=C:\Qt\icu\lib;%LIB%
  9. SET PATH=C:\Qt\icu\lib;%PATH%
  10. SET PATH=C:\Qt\icu\bin;%PATH%
  11. 修改C:\Qt\qt-everywhere-opensource-src-5.6.0\qtbase\mkspecs\common\msvc-desktop.conf的74行和75行为:/SUBSYSTEM:CONSOLE\",5.01\" 和 /SUBSYSTEM:WINDOWS\",5.01\"
  12. 在C:\Qt\下面创建一个qt-5.6.0-build-shared和5.6.0-shared空目录,qt-5.6.0-build-shared为构建目录,5.6.0-shared为安装目录,然后把CMD转到qt-5.6.0-build-shared目录(在这个目录中进行编译,称之为shadow build,即把构建生成的文件和源代码目录中的文件隔开,你也可以再创建多个其他目录,用不同的编译选项进行编译),然后执行下面的命令:
  13. "../qt-everywhere-opensource-src-5.6.0/configure.bat" -prefix C:/Qt/5.6.0-shared -debug-and-release -opensource -ltcg -nomake examples -nomake tests -skip qtwebengine -skip qtwebview -accessibility -plugin-sql-odbc -plugin-sql-sqlite -opengl dynamic -target xp -largefile -D _USING_V110_SDK71_ -qt-zlib -qt-pcre -icu -qt-libpng -qt-libjpeg -qt-freetype -qt-harfbuzz -rtti -ssl -openssl -mp -I C:\Qt\openssl-shared\include -L C:\Qt\openssl-shared\lib -l gdi32
  14. 输入y接受协议,等待配置完成
  15. 执行:jom(如果没有下载jom就执行nmake)
  16. 编译完成后,如果没有出现错误,执行,nmake install,把构建好的Qt库安装到C:/Qt/5.6.0-shared(nmake install 之前可以先执行:nmake docs,生成文档)
 
现在你就可以用QtCreator添加一个Qt版本来测试了,注意在pro文件中增加:
  1. QMAKE_LFLAGS_CONSOLE = /SUBSYSTEM:CONSOLE\",5.01\"
  2. QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS\",5.01\"
  3. DEFINES += _USING_V110_SDK71_

http://blog.csdn.net/kenier/article/details/51064791

Qt 5.6.0 动态编译(VS2013 x86 target xp openssl icu webkit)的更多相关文章

  1. Qt 5.6.2 静态编译(VS2013 x86 target xp openssl icu webkit)

    在去年4月份的时候,我写过一篇动态编译Qt5.6.0的文章,当时是为了解决webkit不能在winxp下面跑的问题,动态编译有一个缺点,就是发布的时候,要携带一大堆dll,使安装包的体积增大.而静态编 ...

  2. 查看和调试Qt源码(动态编译的QT也可进入源码)good

    简述 在调试程序的时候,有时需要调试进入 Qt 源码,这不仅有利于我们了解内部实现机制,而且对于解决一些隐蔽性问题很有帮助. 都知道 F11 是“单步进入”,可是在调试的过程中,按下 F11 却无法进 ...

  3. 基于roslyn的动态编译库Natasha

    人老了,玩不转博客园的编辑器,详细信息转到:https://mp.weixin.qq.com/s/1r6YKBkyovQSMUgfm_VxBg 关键字:Github, NCC, Natasha,Ros ...

  4. QtCreator动态编译jsoncpp完美支持x86和arm平台

    如果是做嵌入式开发. 在Qt下支持JSon最好的办法,可能不是采用qjson这个库.QJson这个库的实例只提供了x86环境下的编译方法. Installing QJson-------------- ...

  5. 详解Qt,并举例说明动态编译(shared)和静态编译(static)以及debug and release 编译版本区别(可产生静态版的Debug版本,需要把-release 改为 –debug-and-release)

    作为初入Qt学习的新人,花了整整一两天时间,对Qt编译版本等问题进行了一步步探索,首先感谢网站博客中文章,开始也不是很明白一些几个问题: 1.Qt版本问题 作为初学者,可能下载时这么多版本,如何选择呢 ...

  6. 使用PyQt(Python+Qt)+动态编译36行代码实现的计算器

    PyQt是基于跨平台的图形界面C++开发工具Qt加Python包装的一个GPL软件(GPL是GNU General Public License的缩写,是GNU通用公共授权非正式的中文翻译),Qt基于 ...

  7. win环境下,用虚拟化工具打包Qt动态编译exe的过程(使用Enigma Virtual Box)

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://goldlion.blog.51cto.com/4127613/834075 引子 ...

  8. Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作 (转)

    大致流程: 1.安装Qt(源码版)以及其他必要的环境 2.编译/安装 3.配置 4.使用 ----------正文分割线---------- 1.安装Qt(源码版) 1.1 下载Qt(两个地址二选一即 ...

  9. Qt 4.7.4 完美动态编译发布动态调试,以及静态编译发布

    首先是准备工作,去QT主页下载独立的QT类库安装包以及完整QT SDK安装包,还有QT Creator for windows 版 下载地址:http://qt.nokia.com/downloads ...

随机推荐

  1. Linux之定时任务Crond介绍

    Linux之定时任务 定时任务Crond介绍 Crond是linux系统中用来定期执行命令/脚本或指定程序任务的一种服务或软件,一般情况下,我们安装完Centos5/6 linux操作系统之后,默认便 ...

  2. 【35.56%】【727A】Transformation: from A to B

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  3. 浅谈Linux下各种压缩 解压命令和压缩比率对比

    Linux下压缩.解压命令五花八门,不像在windows下一个winrar打遍天下无敌手,清一色的.rar .zip格式. 比如,Linux下常用的tar tar.gz tar.bz2 .Z等等不一而 ...

  4. QImage学习学习

    QImage这个类之前用过,无外乎是加载一个图片文件显示出来,并没有做过多的研究,目前工作中用到了灰度图以及图片的像素操作,重新学习了下,记录记录. 一些基本操作方法 获取图像的首地址: const ...

  5. SQLyog 报错2058 :连接 mysql 8.0.12 解决方法

    今天闲来无事,下载新版的 mysql 8.0.12 安装. 为了方便安装查看,我下载了sqlyog 工具 连接 mysql 配置新连接报错:错误号码 2058,分析是 mysql 密码加密方法变了. ...

  6. twemproxy架构分析——剖析twemproxy代码前编

    twemproxy背景 在业务量剧增的今天,单台高速缓存服务器已经无法满足业务的需求, 而相较于大容量SSD数据存储方案,缓存具备速度和成本优势,但也存在数据安全性的挑战.为此搭建一个高速缓存服务器集 ...

  7. uwp - 做一个相对炫酷的动画按钮/按钮动画

    原文:uwp - 做一个相对炫酷的动画按钮/按钮动画 看腻了系统自带的button animation何不尝试下自定义一个较为炫酷的动画顺便提升用户体验.效果图: 动画分为几个部分,分别是:内圆从中心 ...

  8. 1.4微服务前奏 netcore学习

    1.要让vs2017能够选择.net core 2.1版本,只需要安装.net core2.1的sdk安装包就行了 官方地址:https://www.microsoft.com/net/learn/g ...

  9. Matlab Tricks(二十六)—— 置乱(随机化)与恢复(shuffle/permutation & restore)

    x = 1:10; n = length(x); perm = randperm(n); x_perm = x(perm); % x_perm 表示置乱后的结果 x_ori(perm) = x_per ...

  10. OpenCV实现朴素贝叶斯分类器诊断病情

    贝叶斯定理由英国数学家托马斯.贝叶斯(Thomas Baves)在1763提出,因此得名贝叶斯定理.贝叶斯定理也称贝叶斯推理,是关于随机事件的条件概率的一则定理. 对于两个事件A和B,事件A发生则B也 ...