用于 Windows XP 目标的 QtWebEngine

Posted

技术标签:

【中文标题】用于 Windows XP 目标的 QtWebEngine【英文标题】:QtWebEngine for Windows XP target 【发布时间】:2015-07-28 14:04:18 【问题描述】:

我试图构建 Qt5.5 以便能够在 Windows XP 上运行 QtWebEngine。 这是我设置环境的 bat 文件:

REM Set up \Microsoft Visual Studio 2013, where <arch> is \c amd64, \c x86, etc.
CALL "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
SET _ROOT=%CD%
SET PATH=%_ROOT%\qtbase\bin;C:\Perl\bin;%_ROOT%\gnuwin32\bin;C:\devtools\Bitnami\rubystack-2.0.0-26\ruby\bin;C:\Python27;%PATH%
REM Uncomment the below line when using a git checkout of the source repository
REM SET PATH=%_ROOT%\qtrepotools\bin;%PATH%
SET QMAKESPEC=win32-msvc2013
SET _ROOT=

用于配置构建的bat文件

configure -debug-and-release -nomake examples -opensource -nomake tests -target xp -prefix c:\qt5\5.5\msvc2013-winxp

构建成功,但我无法使用 QtWebEngine 运行任何示例

是否可以为 WinXP 目标构建 QtWebEngine 或者它与 WinXP 不兼容?

【问题讨论】:

【参考方案1】:

Qt WebEngine 5.5.0 for Windows XP 兼容性构​​建步骤

正式发布的问题

Qt 5.5.0 官方发布的 qwebengine 模块与 Windows XP 应用程序不兼容,即使您使用 XP 兼容性编译/链接设置/标志强制您的项目二进制文件(QT DLL 可能仍然不兼容)并且您可以执行您的 exe 二进制文件在 XP 下,无论如何你都不能使用 qwebengine 模块——因为 QtWebEnbineProcess.exe 被构建为 Windows XP 的无效 EXE。

要使 Qt WebEngine 5.5.0 可以在 winXP 上运行,您必须使用附加选项的方式重建 Qt 模块(正如所说的官方 Qt 版本根本不兼容,您必须构建新的)。在 Windows 下 QtWebEngine 只能在 Visual Studio 2013 中构建,无法在其他版本的 Visual Studio 中构建 chromium 代码。通常Windows下的Qt和Chromium可以使用OpenGL或/和ANGLE项目(使用Direc3D9Ex或Direct3D11)支持硬件图形操作,如果你为WinXP构建你别无选择,你必须使用OpenGL(这是最糟糕的选择,如果您有选择),因为 Direct3D9Ex/Direct3D11 只能从 Vista+ 安装。因此,请确保您已为将运行您的程序的机器安装了更新的图形驱动程序,因为用于 OpenGL 的显卡的现有 XP 驱动程序将非常过时并且可能无法正常工作。

问题根源

任何问题都只是因为默认的 Visual C++ 2013 应用程序编译与 XP(C 运行时和 EXE 子系统)不兼容,但您仍然可以在 Visual C++ 2013 中更改和使用与 WinXP 兼容的运行时,此处描述:

http://blogs.msdn.com/b/vcblog/archive/2012/10/08/windows-xp-targeting-with-c-in-visual-studio-2012.aspx

所以基本上你必须添加 Windows SDK7.1A 路径以包含、库和二进制文件,为 Qt 和 chromium 的每个 cl 编译器执行传递 /D_US​​ING_V120_SDK71_ 并为链接器调用传递 /SUBSYSTEM:WINDOWS,5.01 或 /SUBSYSTEM:CONSOLE,5.01在构建您的项目和 QtWebEngineProcess.exe 时,是不是很简单 :)

构建要求:

    Visual C++ 2013(在我的例子中安装在标准位置:C:\Program Files (x86)\Microsoft Visual Studio 12.0)

    Windows SDK 7.1A - 最后一个与 Windows XP 兼容的 SDK,/D_US​​ING_V120_SDK71_ 强制使用它(在我的情况下,安装在标准位置:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A)

    用于构建 chromium 的第三方工具:Git、Perl、Python、pscp.exe - 您必须在构建之前将它们的二进制文件添加到 PATH 环境变量中。

    OpenGL ES SDK 使用 OpenGL ES 2.0 实现,我从 AMD 下载(在我的情况下下载到 D:\rzaba\qt\GLES_SDK)。

    Qt 5.5.0 源 - 解压到 D:\rzaba\qt\src-5.5.0

(我无法粘贴更多链接,因为我没有 2 分的声誉,天哪!:D)

构建过程

首先阅读这个:http://doc.qt.io/qt-5/windows-building.html,我们必须像那里一样这样做,但是对于 XP 兼容的构建需要更多的步骤。

现在,如果源代码已解压缩并安装了所有内容,则创建 qt5vars.cmd,在我的情况下,它看起来像这样:

************************************************************************
REM ********** INITIALIZE ENV FOR MSVC 2013 CL COMPILER **********
SET PATH=C:\Windows;C:\Windows\system32
CALL "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
REM ********** UPDATE INCLUDE & LIB TO SUPPORT XP WIN SDK 7.1A **********
SET PATH=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin;%PATH%
SET INCLUDE=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;%INCLUDE%
SET LIB=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib;%LIB%
SET CL=/D_USING_V120_SDK71_;%CL%
REM ********** INCLUDE OPENGL DESKTOP GLES SDK **********
SET PATH=D:\rzaba\qt\GLES_SDK\x86;%PATH%
SET INCLUDE=D:\rzaba\qt\GLES_SDK\include;%INCLUDE%
SET LIB=D:\rzaba\qt\GLES_SDK\x86;%LIB%
REM ********** 3D PARTY BUILD TOOLS BINARIES: PUTTY, RUBY, PERL, GIT, PYTHON ********** 
SET PATH=D:\putty;D:\Ruby22\bin;D:\Perl\bin;D:\Git;D:\Git\bin;D:\Git\cmd;D:\Python27;%PATH%
REM ********** SETUP QT QMAKE ENV **********
SET QMAKESPEC=win32-msvc2013
SET PATH=D:\rzaba\qt\src-5.5.0\qtbase\bin;D:\rzaba\qt\src-5.5.0\gnuwin32\bin;%PATH%
************************************************************************

通常脚本会为构建配置 PATH、INCLUDE、LIB 环境变量。在 CL env 变量中可以强制 CL 编译器设置,这是我们定义 V120_XP 平台使用的主要地方。

现在在开始构建之前,您必须从源代码中编辑一些文件:

    您必须编辑文件:qtwebengine\src\3rdparty\ninja\configure.py 找到带有以下内容的行:“if platform.is_msvc():”并且您有 cl 编译器标志,您必须删除 '/WX' 标志,因为它将无法编译 sdk7.1。您也可以在那里添加'/D_US​​ING_V120_SDK71_'标志,以确保忍者工具也将定义为使用V120_xp。

    您必须编辑另一个文件:qtwebengine\src\process\process.pro 并在其中添加这些行:

win32:

QMAKE_CXXFLAGS += /D_US​​ING_V120_SDK71

QMAKE_LFLAGS_CONSOLE += /SUBSYSTEM:CONSOLE,5.1

QMAKE_LFLAGS_WINDOWS += /SUBSYSTEM:WINDOWS,5.1

您还应该将其添加到您的项目中。这将生成与 XP 兼容的 QtWebEngineProcess.exe 文件。如果没有这个 Visual C++ 2013 为 winXP 构建无效的 EXE 文件。

如果你现在打开命令行并调用这个脚本你必须cd到qt源目录并调用configure,这是我的配置:

configure -prefix d:[your install path there] -confirm-license -target xp -opensource -opengl desktop -debug-and-release -nomake examples -nomake tests -no-warnings-are-errors

所以我想要构建调试和发布。如果您正确设置了所有内容,您应该会看到一些编译过程并为 qt 模块创建 Makefile。 在调用 nmake 之后,编译需要几个小时,然后 nmake install 复制/安装创建的库到前缀。 祝你好运

请记住,图形设备必须支持 OpenGL ES 2.0,否则在创建 QWebView 后,您的应用程序将被 OpenGL 驱动程序崩溃,或者窗口 GUI 变黑。如果你想在旧机器上运行你的应用程序,你可以构建 Mesa OpenGL 软件渲染(我做了,性能很慢,每个刷新窗口 GUI 内容几秒钟,但它可以工作)并使用它代替硬件驱动程序。

【讨论】:

你在*.pro文件中写了:QMAKE_CXXFLAGS += /D_US​​ING_V120_SDK71。但是最后一个下划线 /D_US​​ING_V120_SDK71_ 在哪里?另外,我在另一个站点上遇到了以下指令 QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01 。 (1) 那么,我应该选择哪个版本 - 5.01 还是 5.1? (2) 如果我想调试隐式调用 QtWebEngineProcess.exe 的程序,我应该在哪里设置--single-process? (3) 我必须部署哪些第三方 dll(例如 OpenGL ES SDK)? (4) 程序的调试版本是否可以与 QtWebEngineProcess.exe 一起使用(在 1 个文件夹中混合发布和调试 Qt dll)? 请添加明确的信息,说明该引擎自 Qt 5.6 起不适用于 XP :( bugreports.qt.io/browse/QTBUG-49900【参考方案2】:

您需要使用 Visual Studio 2013 中的编译器,但支持 Windows XP(即 7.1A)的 Windows SDK 中的标头/库:

"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\vcvarsall.bat" x86
set INCLUDE=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include;%INCLUDE%
set LIB=C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\lib;%LIB%
set CL=/D_USING_V110_SDK71_

请注意,尽管 QtWebEngine 需要一个有效的 Qt Quick 堆栈(甚至是 QtWebEngineWidgets!),而后者又需要 OpenGL。因为 Windows XP 上的 OpenGL 支持几乎不存在,并且 ANGLE(DirectX 包装器)在 Windows XP 上不起作用,所以您需要确保安装了合适的第 3 方 OpenGL 驱动程序,或者退回到软件opengl32.dll(例如来自 mesa)。如果您有 Qt 许可证,您还可以依赖 Qt Quick 2d 渲染器。

【讨论】:

【参考方案3】:

只要用vs2013打开qtwebengine\src\process\process.pro,修改为“Visual Studio 2013 - Windows XP (v120_xp)”,重新生成QtWebEngineProcess.exe

【讨论】:

以上是关于用于 Windows XP 目标的 QtWebEngine的主要内容,如果未能解决你的问题,请参考以下文章

QApplication::setWindowIcon 适用于 Windows XP,但不适用于 Windows 7

用于 xp 平台程序的 visual basic .net 程序正在 Windows 7 上构建

无法使用 Windows XP SP3 目标调试大型 delphi XE2 应用程序跨平台

Windows XP 上用于高级格式硬盘的物理扇区大小

请问windows xp home和windows xp prof.有啥区别?

Wix Toolset CustomAction 用于确定操作系统是 windows 7/xp 家庭版还是入门版,并显示消息不是