编译 Qt 5.6(使QtWebEngine支持XP)
2017-01-22 07:30
1096 查看
说明
qt 5.6的编译进行了数十遍,才得出本文的可行方案,之所以花了这么多的时间,主要是qt引入了QtWebEngine模块后,导致编译难度直线上升,而且又有一些中国特色的问题(如360安全卫士)导致,希望本文可以为大家节省更多的时间为什么要自己编?
因为qt的预编译发行包中,QtWebEngine模块的QtWebEngineProcess.exe不能在xp下运行,是因为他们编译的时候没用支持xp的工具集导致的
源码下载
Qt git地址:git://code.qt.io/qt/qt5.git
推荐用
SourceTree客户端来克隆源码
准备工作
系统Windows 7或者
Windows 10
编译器
Visual Studio 2013 Update 5或者
Visual Studio 2015 Update 1
本文在以下4种情况下都编译通过
Windows 7 + Visual Studio 2013 Update 5
Windows 7 + Visual Studio 2015 Update 1
Windows 10 + Visual Studio 2013 Update 5
Windows 10 + Visual Studio 2015 Update 1
安装Git,编译过程可能会启动 git.exe
安装ActivePerl
安装Python
编译ICU库
编译openssl
编译webkit需要的环境
Ruby
winflexbison
sqlite-amalgamation
最重要的准备工作
保持编译过程中联网
关闭360等安全卫士,杀毒软件,编译过程中360会弹框拦截
将系统的区域改成 英语(美国),否则编译QtWebEngine会失败,如图所示
可能遇到的编译错误
使用vs2013编译的时候,有可能会遇到以下错误
1 | Error 2 error C2440: 'default argument' : cannot convert from 'const wchar_t [1]' to 'const BSTR' (src\GAudioOutput.cc) C:\Program Files (x86)\Windows Kits\8.1\Include\um\sapi.h 16917 1 qgroundcontrol |
qtbase\mkspecs\common\msvc-base.conf文件,将下面这段删除,如图
使用
VS2015 Update2/Update3编译时遇到以下错误
12 | ...\skedge.cpp(231): error C2220: warning treated as error - no 'object' file generated ...\skedge.cpp(231): warning C4334: '<<': result of 32-bit shift implicitly converted to 64 bits (was 64-bit shift intended?) |
参考链接:QtWebEngine does not build with VS2015 SP2
编译
新建一个 environment.bat,用来执行环境变量的设置,代码如下:12 | @echo off rem 设置vs安装路径 set MSVC_PATH=C:\Program Files (x86)\Microsoft Visual Studio 14.0 rem 设置icu源码路径,在编译icu时用到,编译qt用不到源码 set ICU_SRC_PATH=C:\Users\king\Documents\Workspace\Qt\build\icu-source\source rem 设置icu编译安装的路径,在编译icu时用到,编译qt用不到这个格式的路径,注意安装路径格式,是linux风格 set ICU_INSTALL_PATH=/cygdrive/C/Users/king/Documents/Workspace/Qt/build/icu rem 设置CYG依赖,在编译icu时用到,编译qt用不到 set CYG_WIN_PATH=C:\Users\king\Documents\dev\cygwin64\bin rem 设置ICU编译安装的路径,编译Qt会用到,注意格式,是Windows风格 set ICU_INSTALL_PATH_WIN=C:\Users\king\Documents\Workspace\Qt\build\icu rem 设置openssl源码路径,在编译openssl时用到,编译qt用不到源码 set OPENSSL_SRC_PATH=C:\Users\king\Documents\Workspace\Qt\build\openssl-1.0.1p rem 设置openssl的最终安装路径,编译qt时会用到 set OPENSSL_INSTALL_PATH=C:\Users\king\Documents\Workspace\Qt\build\openssl rem 设置编译Qt的编译器配置文件名 set QMAKESPEC=win32-msvc2015 rem 设置qt的源码路径 set QT5_SRC_PATH=C:\Users\king\Documents\Workspace\Qt\qt5 rem 设置qt编译后的安装路径 set QT5_INSTALL_PATH=C:\Users\king\Documents\Workspace\Qt\qt_5.6.0 rem 设置git安装路径 set GIT_PATH=C:\Program Files\Git rem 设置Perl的bin路径 set PERL_PATH=C:\Users\king\Documents\dev\Perl\bin rem 设置python安装路径 set PYTHON_PATH=C:\Program Files (x86)\Python27 rem qtwebkit依赖环境 set WIN_FLEX_BISION_PATH=D:\Dev\win_flex_bison-latest set SQLITE3SRCDIR=D:\Dev\sqlite-amalgamation-3110100 set RUBY_PATH=D:\Dev\Ruby22\bin rem 执行MSVC环境设置 call "%MSVC_PATH%\VC\vcvarsall.bat" x86 |
qt的编译,代码如下
12 | @echo off rem 调用前一个bat,执行环境变量的设置 call environment.bat rem 将qt相关的路径加入path变量,为什么qtbase\lib也加进去,因为编译过程中会执行qt自己编出来的exe,会依赖qt相关的dll,所以也加进去,git路径也加进来,保证编译过程中可以找到git.exe set PATH=%QT5_SRC_PATH%\qtbase\bin;%QT5_SRC_PATH%\qtbase\lib;%QT5_SRC_PATH%\gnuwin32\bin;%GIT_PATH%\bin;%PATH% rem 将qtrepotools\bin路径加入path环境变量 set PATH=%QT5_SRC_PATH%\qtrepotools\bin;%PATH% rem 将perl,python加入path set PATH=%PATH%;%PERL_PATH%;%PYTHON_PATH% rem 设置icu和openssl库的引用路径 set LIB=%LIB%;%ICU_INSTALL_PATH_WIN%\lib;%OPENSSL_INSTALL_PATH%\lib rem 设置icu和openssl库的头文件引用路径 set INCLUDE=%INCLUDE%;%ICU_INSTALL_PATH_WIN%\include;%OPENSSL_INSTALL_PATH%\include rem 将icu和openssl的bin目录加入PATH环境变量,icu的lib路径也加入PATH,是因为编译过程中运行的一些exe依赖icu库的dll set PATH=%PATH%;%ICU_INSTALL_PATH_WIN%\bin;%OPENSSL_INSTALL_PATH%\bin;%ICU_INSTALL_PATH_WIN%\lib rem 进入qt源码目录 cd /D %QT5_SRC_PATH% rem 配置qt,-target xp是支持xp系统,不然编出来的exe在xp下不能运行,比如QtWebEngineProcess.exe rem 可选参数 -force-debug-info:release版本也生成PDB文件 call %QT5_SRC_PATH%\configure -prefix %QT5_INSTALL_PATH% -debug-and-release -opensource -confirm-license -opengl dynamic -mp -icu -openssl -nomake examples -nomake tests -target xp -skip qtwebkit -no-directwrite rem 执行编译 nmake rem 执行安装 nmake install rem 复制openssl和icu到qt安装目录中 xcopy /y /k "%ICU_INSTALL_PATH_WIN%\lib\icudt56.dll" "%QT5_INSTALL_PATH%\bin\" xcopy /y /k "%ICU_INSTALL_PATH_WIN%\lib\icuin56.dll" "%QT5_INSTALL_PATH%\bin\" xcopy /y /k "%ICU_INSTALL_PATH_WIN%\lib\icuuc56.dll" "%QT5_INSTALL_PATH%\bin\" xcopy /y /k "%ICU_INSTALL_PATH_WIN%\lib\icudt.lib" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%ICU_INSTALL_PATH_WIN%\lib\icuin.lib" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%ICU_INSTALL_PATH_WIN%\lib\icuuc.lib" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%OPENSSL_INSTALL_PATH%\bin\libeay32.dll" "%QT5_INSTALL_PATH%\bin\" xcopy /y /k "%OPENSSL_INSTALL_PATH%\bin\ssleay32.dll" "%QT5_INSTALL_PATH%\bin\" xcopy /y /k "%OPENSSL_INSTALL_PATH%\lib\libeay32.lib" "%QT5_INSTALL_PATH%\lib\" xcopy /y /k "%OPENSSL_INSTALL_PATH%\lib\ssleay32.lib" "%QT5_INSTALL_PATH%\lib\" pause |
新建一个 build_qtwebkit.bat,用来执行
qtwebkit的编译,代码如下
12 | @echo off call environment.bat set LIB=%LIB%;%ICU_INSTALL_PATH_WIN%\lib;%OPENSSL_INSTALL_PATH%\lib;%QT5_INSTALL_PATH%\lib set INCLUDE=%INCLUDE%;%ICU_INSTALL_PATH_WIN%\include;%OPENSSL_INSTALL_PATH%\include;%QT5_INSTALL_PATH%\include set PATH=%QT5_INSTALL_PATH%\bin;%WIN_FLEX_BISION_PATH%;%ICU_INSTALL_PATH_WIN%\bin;%OPENSSL_INSTALL_PATH%\bin;%ICU_INSTALL_PATH_WIN%\lib;%QT5_SRC_PATH%\gnuwin32\bin;%PERL_PATH%;%PYTHON_PATH%;%RUBY_PATH%;%PATH% cd /D %QT5_SRC_PATH% %PERL_PATH%\perl %QT5_SRC_PATH%\qtwebkit\Tools\Scripts\build-webkit --qt pause |
12 | @echo off rem 调用前一个bat,执行环境变量的设置 call environment.bat rem 将qt相关的路径加入path变量,为什么qtbase\lib也加进去,因为编译过程中会执行qt自己编出来的exe,会依赖qt相关的dll,所以也加进去,git路径也加进来,保证编译过程中可以找到git.exe set PATH=%QT5_SRC_PATH%\qtbase\bin;%QT5_SRC_PATH%\qtbase\lib;%QT5_SRC_PATH%\gnuwin32\bin;%GIT_PATH%\bin;%PATH% rem 将qtrepotools\bin路径加入path环境变量 set PATH=%QT5_SRC_PATH%\qtrepotools\bin;%PATH% rem 将perl,python加入path set PATH=%PATH%;%PERL_PATH%;%PYTHON_PATH% rem 进入qt源码目录 cd /D %QT5_SRC_PATH% rem 下面这句是用来清除所有的编译临时文件,有需要时再打开注释,比如想从头开始重新编译 git submodule foreach --recursive "git clean -dfx" |
相关文章推荐
- Qt5.6官网二进制安装包编译出的程序不支持XP的解决办法
- qt5.6 webengine兼容xp的编译方法
- 用VS2015编译Qt5.6.0,WebEngine支持XP
- 用MSVC2015编译Qt5.6(包含openssl、webengine)
- Qt5.9.0正式版动态编译 (VS2017) 支持WebEngine 、 ICU 、OpenSSL
- 官方发布的新版本Qt已经不支持XP了,要自己从源代码编译
- VS2015编译Qt5.7.0生成支持XP的静态库(很不错)
- 基于Nanopi2 硬件 交叉编译QT 5.6 (支持硬件OpenGL)
- VS2015编译Qt5.7.0生成支持XP的静态库
- VS2012编译安装VTK-6.2.0_支持Qt5.2.1
- 【QT笔记】编译(1):如何添加c++0x支持
- Qt --编译 QtWebEngine 之错误 window8 && 64位
- 嵌入式跨平台C++3D界面开发框架最新版Qt 5.6 支持高DPI缩放
- MinGW编译安装VTK-5.10.1_支持Qt4.8.5
- Qt5.5+VS2013编译的程序在xp下兼容问题解决方法
- Qt5.6 windows下vs2015编译QODBC
- 让VC2012生成的程序支持XP系统(QT的DLL都是支持XP的,只与EXE有关)
- 在CENT OS 7.0 64位系统上源码编译安装OPENCV3.0以及CUDA7.0,支持CUDA开发,并集成QT5.5.0的开发环境
- VS2012编译安装ITK-4.7.2_支持Qt5.2.1
- Qt5.3.0的移植安装与测试(交叉编译,用于arm,支持tslib触摸屏)