【发布时间】:2015-10-30 12:16:40
【问题描述】:
我使用 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 桌面 -no-angle -nomake 测试 -target xp
之后,我使用这个静态库构建了我的 Qml 应用程序的静态链接 exe。它可以在我安装了Qt5.5的windows中随处运行。
然后我用VMware Workstation安装了一个纯Windows XP SP3,只安装了VC2008 runtime,没有安装VC2013 runtime。
首先,我将exe复制到这个XP中。它可以运行,但没有任何显示。我需要在 taskmgr 中杀死它。
其次,我将D:\Qt\qt-5.5.0-x86-static\qml中的所有文件夹复制到我的exe的根目录,它可以运行。但它只显示了一个带有正确窗口标题的空白窗口。
我想我已经听取了Deploying Qt 5 App on Windows 中的所有建议。但是为什么qml部分不能编译成静态库呢?如何让我的应用不显示空白?
附:即使我使用windeployqt 来部署应用程序的共享链接库版本。它还向我显示了空白窗口。但它可以在 Windows 7 上运行。
qtdiag 在我的虚拟 XP 上的输出:
Qt 5.5.0(i386-little_endian-ilp32 静态发布版本;由 MSVC 2013 提供) 在“windo ws”操作系统上:Windows XP [winnt 版本 5.1.2600]
架构:i386;特点:SSE2 SSE3 SSSE3 SSE4.1 SSE4.2
库信息:前缀路径:D:\Qt\qt-5.5.0-x86-static
文档路径:D:\Qt\qt-5.5.0-x86-static\doc HeadersPath: D:\Qt\qt-5.5.0-x86-static\include 库路径: D:\Qt\qt-5.5.0-x86-static\lib 库可执行文件路径: D:\Qt\qt-5.5.0-x86-static\bin BinariesPath: D:\Qt\qt-5.5.0-x86-static\bin 插件路径: 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 数据路径:D:\Qt\qt-5.5.0-x86-static
翻译路径:D:\Qt\qt-5.5.0-x86-static\translations
示例路径:D:\Qt\qt-5.5.0-x86-static\examples 测试路径: 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
我需要复制此类文件夹QtQtQuick.2QtQuick 的原因是那些库无法编译加载。即使我将它们添加到 .pro 文件中。从 Qt 5.0 到 Qt 5.5。官方方面似乎不喜欢人们通过静态链接使用 QML。因此,静态构建 QML 应用程序是浪费时间。
【问题讨论】:
-
在 stdout/stderr 或调试通道上是否有任何有用的输出?
-
@FrankOsterfeld 在下面的答案中查看 cmets,这就是使用
2>&1的所有输出。 -
@FrankOsterfeld 哦,我误会你了。我将 exe 放入纯 XP 中,看看它可以在没有安装 Qt 运行时的情况下运行。所以我无法调试它。在我的开发环境中,一切正常。
标签: qt deployment static qml qt5.5