经历了多次延期后,在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. redux相关学习资源

    很多学习资料,直接在SF.掘金搜索关键词redux源码等可以获得. redux参考版本3.6或3.7.2   redux-thunk看1.0.1 1.redux源码分析之四:compose函数    ...

  2. MFC下WM_NOTIFY消息处理流程

    参考文章:MFC的消息反射机制 在前一篇文章:MFC消息处理流程概述中描述了MFC消息处理的大体流程.由CWnd::OnWndMsg函数可知,当消息为WM_NOTIFY消息时,调用的是virtual ...

  3. Bit error testing and training in double data rate (ddr) memory system

    DDR PHY interface bit error testing and training is provided for Double Data Rate memory systems. An ...

  4. memcache redis mogodb 分别适用在什么样的场景?

    memcache 与 redis 都是key-value存储系统,相对来说redis可能比memcache适应场景多些,存储的value类型也更多些,而redis也支持主从同步.而mongo是一种文档 ...

  5. WPF 曲线图表控件(自制)(一)

    原文:WPF 曲线图表控件(自制)(一) 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/koloumi/article/details/775092 ...

  6. redis在windows10上跑起来

    原文:redis在windows10上跑起来 今天,开始学习redis,发现大多数redis都是在Linux上面运行的,可是我想把它放到windows上面运行,经过查找资料,在GitHub上面发现了一 ...

  7. 机器学习: Viola-Jones 人脸检测算法解析(一)

    在计算机视觉领域中,人脸检测或者物体检测一直是一个非常受关注的领域,而在人脸检测中,Viola-Jones人脸检测算法可以说是非常经典的一个算法,所有从事人脸检测研究的人,都会熟悉了解这个算法,Vio ...

  8. Leetcode 260 Single Number III 亦或

    在一个数组中找出两个不同的仅出现一次的数(其他数字出现两次) 同样用亦或来解决(参考编程之美的1.5) 先去取出总亦或值 然后分类,在最后一位出现1的数位上分类成 ans[0]和ans[1] a&am ...

  9. Robot Framework 快速入门_中文版

    目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...

  10. WPF 设置控件阴影后,引发的Y轴位置变化问题

    原文:WPF 设置控件阴影后,引发的Y轴位置变化问题 背景 最近遇到一个动画执行时,文本位置变化的问题.如下图: 如果你仔细看的话,当星星变小时,文本往下降了几个像素. 貌似有点莫名其妙,因为控件之间 ...