将 Qt5.5 Qml App 部署到 Windows XP 显示空白 window?
Deploying Qt5.5 Qml App to Windows XP shows me a blank window?
我使用 VS2013 构建了一个静态 x86 Qt5.5 库,使用:
configure -static -prefix D:\Qt\qt-5.5.0-x86-static -opensource -release -static-runtime -nomake examples -no-compile-examples -static-runtime -nomake tools -no-iconv -qt-zlib -skip qtwebkit -confirm-license -qmake -opengl desktop -no-angle -nomake tests -target xp
之后我使用这个静态库构建了我的 Qml 应用程序的 static-link exe。在我安装了Qt5.5的windows中运行到处都可以
然后我用VMware Workstation装了个纯WindowsXP SP3只装了VC2008运行时候没装VC2013运行时
首先,我将exe复制到这个XP中。它可以 运行 但没有任何显示。我需要在 taskmgr 中将其杀死。
其次,我将D:\Qt\qt-5.5.0-x86-static\qml
中的所有文件夹复制到我的exe的根目录中,它可以运行。但它只显示了一个空白 window 和正确的 window 标题。
我想我已经听取了 Deploying Qt 5 App on Windows 中的所有建议。但是为什么qml部分不能编译成静态库呢?如何让我的应用不显示空白?
P.S。即使我使用 windeployqt
部署应用程序的 share-link 库版本。它还向我显示空白 window。但它可以 运行 在 Windows 7.
qtdiag 在我的虚拟 XP 上的输出:
Qt 5.5.0 (i386-little_endian-ilp32 static release build; by MSVC 2013)
on "windo ws" OS: Windows XP [winnt version 5.1.2600]
Architecture: i386; features: SSE2 SSE3 SSSE3 SSE4.1 SSE4.2
Library info: PrefixPath: D:\Qt\qt-5.5.0-x86-static
DocumentationPath: D:\Qt\qt-5.5.0-x86-static\doc HeadersPath:
D:\Qt\qt-5.5.0-x86-static\include LibrariesPath:
D:\Qt\qt-5.5.0-x86-static\lib LibraryExecutablesPath:
D:\Qt\qt-5.5.0-x86-static\bin BinariesPath:
D:\Qt\qt-5.5.0-x86-static\bin PluginsPath:
D:\Qt\qt-5.5.0-x86-static\plugins ImportsPath:
D:\Qt\qt-5.5.0-x86-static\imports Qml2ImportsPath:
D:\Qt\qt-5.5.0-x86-static\qml ArchDataPath:
D:\Qt\qt-5.5.0-x86-static DataPath: D:\Qt\qt-5.5.0-x86-static
TranslationsPath: D:\Qt\qt-5.5.0-x86-static\translations
ExamplesPath: D:\Qt\qt-5.5.0-x86-static\examples TestsPath:
D:\Qt\qt-5.5.0-x86-static\tests SettingsPath:
Standard paths [... denote writable entry]: DesktopLocation:
"Desktop" *C:\Documents and Settings\Administrator\
最终结论:
问题是我的虚拟 Windows XP 中的图形 driver。它可以 运行 在其他真实 PC 上。
但是 QML 的静态构建有一个可悲的问题。
我发现了这个:
https://forum.qt.io/topic/22035/qml-apps-not-runnable-using-static-build-up-to-qt-5-0-1-release/24
我之所以需要复制这样的文件夹 Qt
QtQuick.2
QtQuick
是因为那些库不能是 compile-loaded。即使我将它们添加到 .pro 文件中。从 Qt 5.0 到 Qt 5.5。官方似乎不喜欢人们使用 static-link 的 QML。因此,静态构建 QML 应用程序是浪费时间。
Qt Quick 应用程序需要 3d 加速才能工作。这基于 OpenGL、DirectX via Angle 或 Qt 商业版本附带的某种软件渲染器。由于您在配置中明确排除了 Angle,因此您需要一个合适的 OpenGL 驱动程序。确保 OpenGL 在您的机器上工作。您会找到相应的工具。
我认为这与缺少 C++ 标准库(VC2013 运行时间)无关,因为在这种情况下,您的应用程序会在启动期间崩溃,而不是 运行。然而,Qt Quick 图形问题通常会导致 运行ning 黑色应用程序向控制台写入警告。
进一步的调试可以使用Qt自带的qtdiag.exe命令行工具来完成(它是在线安装器自带的,从源码编译的时候不知道在哪)。它会检查您使用的是哪个图形驱动程序,并且通常会显示错误消息。
我使用 VS2013 构建了一个静态 x86 Qt5.5 库,使用:
configure -static -prefix D:\Qt\qt-5.5.0-x86-static -opensource -release -static-runtime -nomake examples -no-compile-examples -static-runtime -nomake tools -no-iconv -qt-zlib -skip qtwebkit -confirm-license -qmake -opengl desktop -no-angle -nomake tests -target xp
之后我使用这个静态库构建了我的 Qml 应用程序的 static-link exe。在我安装了Qt5.5的windows中运行到处都可以
然后我用VMware Workstation装了个纯WindowsXP SP3只装了VC2008运行时候没装VC2013运行时
首先,我将exe复制到这个XP中。它可以 运行 但没有任何显示。我需要在 taskmgr 中将其杀死。
其次,我将D:\Qt\qt-5.5.0-x86-static\qml
中的所有文件夹复制到我的exe的根目录中,它可以运行。但它只显示了一个空白 window 和正确的 window 标题。
我想我已经听取了 Deploying Qt 5 App on Windows 中的所有建议。但是为什么qml部分不能编译成静态库呢?如何让我的应用不显示空白?
P.S。即使我使用 windeployqt
部署应用程序的 share-link 库版本。它还向我显示空白 window。但它可以 运行 在 Windows 7.
qtdiag 在我的虚拟 XP 上的输出:
Qt 5.5.0 (i386-little_endian-ilp32 static release build; by MSVC 2013) on "windo ws" OS: Windows XP [winnt version 5.1.2600]
Architecture: i386; features: SSE2 SSE3 SSSE3 SSE4.1 SSE4.2
Library info: PrefixPath: D:\Qt\qt-5.5.0-x86-static
DocumentationPath: D:\Qt\qt-5.5.0-x86-static\doc HeadersPath: D:\Qt\qt-5.5.0-x86-static\include LibrariesPath: D:\Qt\qt-5.5.0-x86-static\lib LibraryExecutablesPath: D:\Qt\qt-5.5.0-x86-static\bin BinariesPath: D:\Qt\qt-5.5.0-x86-static\bin PluginsPath: D:\Qt\qt-5.5.0-x86-static\plugins ImportsPath: D:\Qt\qt-5.5.0-x86-static\imports Qml2ImportsPath: D:\Qt\qt-5.5.0-x86-static\qml ArchDataPath: D:\Qt\qt-5.5.0-x86-static DataPath: D:\Qt\qt-5.5.0-x86-static
TranslationsPath: D:\Qt\qt-5.5.0-x86-static\translations
ExamplesPath: D:\Qt\qt-5.5.0-x86-static\examples TestsPath: D:\Qt\qt-5.5.0-x86-static\tests SettingsPath:Standard paths [... denote writable entry]: DesktopLocation: "Desktop" *C:\Documents and Settings\Administrator\
最终结论: 问题是我的虚拟 Windows XP 中的图形 driver。它可以 运行 在其他真实 PC 上。
但是 QML 的静态构建有一个可悲的问题。
我发现了这个:
https://forum.qt.io/topic/22035/qml-apps-not-runnable-using-static-build-up-to-qt-5-0-1-release/24
我之所以需要复制这样的文件夹 Qt
QtQuick.2
QtQuick
是因为那些库不能是 compile-loaded。即使我将它们添加到 .pro 文件中。从 Qt 5.0 到 Qt 5.5。官方似乎不喜欢人们使用 static-link 的 QML。因此,静态构建 QML 应用程序是浪费时间。
Qt Quick 应用程序需要 3d 加速才能工作。这基于 OpenGL、DirectX via Angle 或 Qt 商业版本附带的某种软件渲染器。由于您在配置中明确排除了 Angle,因此您需要一个合适的 OpenGL 驱动程序。确保 OpenGL 在您的机器上工作。您会找到相应的工具。
我认为这与缺少 C++ 标准库(VC2013 运行时间)无关,因为在这种情况下,您的应用程序会在启动期间崩溃,而不是 运行。然而,Qt Quick 图形问题通常会导致 运行ning 黑色应用程序向控制台写入警告。
进一步的调试可以使用Qt自带的qtdiag.exe命令行工具来完成(它是在线安装器自带的,从源码编译的时候不知道在哪)。它会检查您使用的是哪个图形驱动程序,并且通常会显示错误消息。