我用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 App的静态链接exe。它可以在我已安装Qt5.5的Windows中随处运行。
然后我使用VMware Workstation安装纯Windows XP SP3,只安装VC2008运行时而不是VC2013运行时。
首先,我将exe复制到这个XP中。它可以运行,但没有任何显示。我需要在taskmgr中杀死它。
其次,我将D:\Qt\qt-5.5.0-x86-static\qml
中的所有文件夹复制到我的exe的根目录,它可以运行。但它只显示一个窗口标题正确的空白窗口。
我想我已经在Deploying Qt 5 App on Windows听取了所有的建议。但为什么qml部分无法编译成静态库?如何让我的应用程序不显示空白?
P.S。即使我使用windeployqt
部署应用程序的共享链接库版本。它还显示了我的空白窗口。但它可以在Windows 7上运行。
我的虚拟XP上qtdiag的输出:
Qt 5.5.0(i386-little_endian-ilp32静态版本构建; MSVC 2013版) on" windo ws"操作系统:Windows XP [winnt version 5.1.2600]
架构:i386;特性:SSE2 SSE3 SSSE3 SSE4.1 SSE4.2
库信息: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:标准路径[ ... 表示可写条目]:DesktopLocation: "桌面" * C:\ Documents and Settings \ Administrator \
最终结论: 问题是我的虚拟Windows XP中的图形驱动程序。它可以在其他真正的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
的原因是那些lib无法编译加载。即使我将它们添加到.pro文件中。从Qt 5.0到Qt 5.5。官方似乎不喜欢人们通过静态链接使用QML。因此,静态构建QML应用程序是浪费时间。
答案 0 :(得分:2)
Qt Quick应用程序需要3d加速才能工作。这基于OpenGL,DirectX via Angle或某种商业版Qt附带的软件渲染器。由于您在配置中专门排除了Angle,因此需要一个合适的OpenGL驱动程序。确保OpenGL在您的计算机上运行。你会找到适合它的工具。
我认为这与缺少的C ++标准库(VC2013运行时)有关,因为在这种情况下,您的应用程序会在启动期间崩溃而不会运行。但是,快速图形问题通常会导致正在运行的黑色应用程序向控制台发出警告。
可以使用Qt附带的qtdiag.exe命令行工具进行进一步的调试(它附带在线安装程序。我不知道从源代码构建时它在哪里)。它会检查您使用的是哪个图形驱动程序,并且通常可以显示错误消息。