QtWebEngine для цели Windows XP

Я пытался собрать Qt5.5, чтобы иметь возможность запускать QtWebEngine в Windows XP. Вот мой 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введите здесь описание изображения

Можно ли собрать QtWebEngine для цели WinXP или она несовместима с WinXP?


person mbg033    schedule 28.07.2015    source источник


Ответы (3)


Шаги сборки Qt WebEngine 5.5.0 для совместимости с Windows XP

ПРОБЛЕМА С ОФИЦИАЛЬНЫМ ВЫПУСКОМ

Официальный выпуск Qt 5.5.0 Модуль qwebengine несовместим с приложениями Windows XP, даже если вы форсируете свой двоичный файл проекта с компиляцией / настройками компоновки / флагами совместимости с XP (QT DLL, вероятно, все еще несовместимы), и вы можете выполнить свой двоичный файл exe под XP, вы все равно не можете использовать модуль qwebengine - только потому, что QtWebEnbineProcess.exe построен как недопустимый EXE для Windows XP.

Чтобы Qt WebEngine 5.5.0 мог работать на winXP, вы должны пересобрать модули Qt с дополнительными параметрами (поскольку официальный выпуск Qt вообще несовместим, вы должны собрать новый). Под Windows QtWebEngine можно собрать только в Visual Studio 2013, невозможно собрать код хрома в другой версии Visual Studio. Обычно Qt и Chromium под Windows могут быть собраны с использованием OpenGL и/или проекта ANGLE (который использует Direc3D9Ex или Direct3D11) с поддержкой аппаратных графических операций, если вы собираете для WinXP, у вас нет выбора, вы должны использовать OpenGL (что является худшим выбором, если у вас есть выбор), потому что Direct3D9Ex/Direct3D11 доступны для установки только из Vista+. Поэтому убедитесь, что вы установили обновленные графические драйверы для машины, на которой будет запускаться ваша программа, потому что стандартные драйверы XP для вашей карты для OpenGL будут очень устаревшими и, возможно, не будут работать.

ГЕНЕЗИС ПРОБЛЕМЫ

Любые проблемы возникают только потому, что компиляция приложения Visual C++ 2013 по умолчанию несовместима с XP (среда выполнения C и подсистема EXE), но вы все равно можете изменить и использовать среду выполнения, совместимую с WinXP, в Visual C++ 2013, это описано здесь:

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

поэтому в основном вы должны добавить пути Windows SDK7.1A для включения, библиотеки и двоичные файлы, передать /D_USING_V120_SDK71_ для каждого выполнения компилятора cl для Qt и chromium и передать /SUBSYSTEM:WINDOWS,5.01 или /SUBSYSTEM:CONSOLE,5.01 для вызовов компоновщика во время сборки вашего проект и QtWebEngineProcess.exe, просто не правда ли :)

Требования к сборке:

  1. Visual C++ 2013 (в моем случае установлен в стандартном месте: C:\Program Files (x86)\Microsoft Visual Studio 12.0)

  2. Windows SDK 7.1A — последний SDK, совместимый с Windows XP, /D_USING_V120_SDK71_ заставляет его использовать (в моем случае установлен в стандартном месте: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A)

  3. Сторонние инструменты, используемые для сборки хрома: Git, Perl, Python, pscp.exe — вы должны добавить их двоичные файлы в переменную PATH env перед сборкой.

  4. OpenGL ES SDK для использования реализации OpenGL ES 2.0 я скачал с AMD (в моем случае скачал в D:\rzaba\qt\GLES_SDK).

  5. Исходники Qt 5.5.0 - распакованы в D:\rzaba\qt\src-5.5.0

(Я не могу вставить больше ссылок, потому что у меня нет 2 очков репутации, OMG! :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.

Теперь, прежде чем начать сборку, вы должны отредактировать некоторые файлы из исходников:

  1. вы должны отредактировать файл: qtwebengine\src\3rdparty\ninja\configure.py найти строку с: "if platform.is_msvc():" и там у вас есть флаги компилятора cl, вы должны удалить флаг '/WX', потому что это не удастся компиляция для SDK7.1. Вы также можете добавить туда флаг '/D_USING_V120_SDK71_', чтобы убедиться, что инструмент ниндзя также определит использование V120_xp.

  2. и вы должны отредактировать другой файл: qtwebengine\src\process\process.pro и добавить туда эти строки:

win32: {

QMAKE_CXXFLAGS += /D_USING_V120_SDK71

QMAKE_LFLAGS_CONSOLE += /SUBSYSTEM:CONSOLE,5.1

QMAKE_LFLAGS_WINDOWS += /SUBSYSTEM:WINDOWS,5.1

}

вы также должны добавить это в свой проект. Это создаст файл QtWebEngineProcess.exe, совместимый с XP. Без этого Visual C++ 2013 создает недопустимый EXE-файл для WinXP.

Если вы откроете командную строку и вызовете этот скрипт сейчас, вы должны перейти в исходный каталог qt и вызвать configure, это моя конфигурация:

configure -prefix d:[там ваш путь установки] -confirm-license -target xp -opensource -opengl desktop -debug-and-release -nomake examples -nomake Tests -no-warnings-are-errors

Поэтому я хочу построить отладку и релиз. Если вы все настроили правильно, вы должны увидеть процесс компиляции и создать Makefiles для модулей qt. После этого вызова nmake компиляция занимает несколько часов, а затем установка nmake для копирования/установки созданных библиотек в префикс. Удачи

Помните, что графическое устройство должно поддерживать OpenGL ES 2.0, иначе после создания QWebView ваше приложение вылетит из-за драйвера OpenGL, или графический интерфейс окна станет черным. Если вы хотите запустить свое приложение на старой машине, вы можете создать программный рендеринг Mesa OpenGL (я сделал это, и производительность очень низкая, несколько секунд на любое обновление содержимого графического интерфейса окна, но это работает) и использовать его вместо аппаратного драйвера.

person user5362462    schedule 22.09.2015
comment
Вы написали в файле *.pro: QMAKE_CXXFLAGS += /D_USING_V120_SDK71. Но где последнее подчеркивание /D_USING_V120_SDK71_? Также я встречал на другом сайте следующую инструкцию QMAKE_LFLAGS_WINDOWS = /SUBSYSTEM:WINDOWS,5.01. (1) Итак, какую версию мне выбрать - 5.01 или 5.1? (2) Где я должен установить --single-process, если я хочу отлаживать свою программу, которая неявно вызывает QtWebEngineProcess.exe? (3) Какие сторонние библиотеки DLL мне нужно развернуть (например, OpenGL ES SDK)? (4) Способна ли отладочная версия программы работать с QtWebEngineProcess.exe (смешивая релизные и отладочные библиотеки Qt в 1 папке)? - person ilya; 07.11.2016
comment
Пожалуйста, добавьте явную информацию о том, что этот движок не работает с XP начиная с Qt 5.6 :( bugreports.qt. io/browse/QTBUG-49900 - person ilya; 08.11.2016

Вам нужно использовать компилятор из Visual Studio 2013, но заголовки/библиотеки из Windows SDK, поддерживающего Windows XP (это 7.1A):

"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. Поскольку поддержка OpenGL в стандартной версии Windows XP близка к отсутствию, а ANGLE (оболочка DirectX) не работает в Windows XP, вам нужно либо убедиться, что установлен достойный сторонний драйвер OpenGL, либо вернуться к программному обеспечению. opengl32.dll (например, из mesa). Если у вас есть лицензия Qt, вы также можете положиться на визуализатор Qt Quick 2d.

person kkoehne    schedule 31.08.2015

Просто откройте qtwebengine\src\process\process.pro с помощью vs2013, измените на "Visual Studio 2013 - Windows XP (v120_xp)" и перестройте QtWebEngineProcess.exe.

person hcaihao    schedule 02.11.2015