在Windows上部署Qt(C ++ / QML)应用程序

时间:2017-06-26 15:09:04

标签: windows qt qml

我开始了一个只有C ++代码的Qt项目,此时一切正常。以下是我的配置以及我要部署可执行文件的步骤:

在Windows10 64位,x64处理器,联想Thinkpad平板电脑上进行编程。使用Qt5.9框架和MinGW32bit编译器。

  • (1)我首先构建项目并在我的构建目录的副本上启动windeployqt.exe
  • (2)然后,我将每个DLL和可执行文件放入Wix项目中以生成MSI包。据我所知,这个MSI设置的输出应该只是将文件复制到ProgramFiles目录,并添加正确的快捷方式到开始菜单和桌面。

此时,一切都有效。但是几天以后,QML代码被添加到项目中(因此一些OpenGL依赖插件)。我添加了一个QQuickWidget,它在我的视口上实例化了一个QML地理Map对象。在我设法让它在Windows上运行之后,我无法再获得独立 *可执行文件。使用Qt IDE运行它但是,但运行独立 *可执行文件却没有。 (对不起,如果条款不正确:独立包含DLL和大量文件依赖项)

当所有DLL都被复制到可执行文件夹中时(上面的步骤1.),应用程序卡在后台,并且什么都不显示。此外,没有运行时错误来调试它或找出丢失的DLL,如果有。

我的想法是没有加载一些QML插件,或OpenGLES和Angle出现问题,这里有一些我作为依赖的DLL:

  • D3Dcompiler_47.dll libEGL.dll libgcc_s_dw2-1.dll libGLESV2.dll libstdc++-6.dll opengl32sw.dll Qt5Core.dll Qt5Gui.dll Qt5Network.dll {{ 1}} Qt5Positioning.dll Qt5Qml.dll Qt5Quick.dll Qt5QuickWidgets.dll Qt5SerialPort.dll Qt5Svg.dll与可执行文件处于同一级别。
  • Qt5Widgets.dll进入“平台”文件夹,以及其他一些文件夹,例如“qmltooling”,“position”,“platforminputcontexts”...(编辑,看似相关的QML插件目录)。

我不知道它会是什么。有人有什么想法吗?

将环境变量QML_IMPORT_TRACE设置为1时的输出。qwindows.dll消息不是qml跟踪的一部分。自从我添加了QML地图后,我总是得到它们,但是当通过Qt Creator运行时似乎没有问题。

qt.network.ssl ...

4 个答案:

答案 0 :(得分:1)

对于QML应用程序,您应该在使用windeploy.exe时按照以下命令

  

windeployqt --qmldir [path-to-app-qml-files] [path-to-app-binary]

答案 1 :(得分:0)

从Qt安装文件夹复制到.exe文件夹:

  • 仓\ Qt5QuickControls2.dll
  • 仓\ Qt5QuickTemplates2.dll
  • QML \ QtQuick
  • QML \ QtQuick.2

这样你的.exe文件夹就像这样:

enter image description here

如果程序现在运行正常,那么您可以进入QtQuick文件夹并尝试删除程序中未使用的库。

答案 2 :(得分:0)

您可以使用有用的windeployqt工具在发布目录中收集所有必需的依赖项:

rem %1 H:\src\trunk\src\qt\cargofinder
pushd f:\qt\5.9\msvc2015_64\bin
call qtenv2.bat
popd
windeployqt --qmldir %1 .

答案 3 :(得分:0)

我最近遇到此问题,我使用的是 QT版本5.12 64位的编译器 cl(MSVC2017)。我描述了要解决的过程,如下所示:

  1. 我复制所有程序相关的Dllsdepends.exe提示。但是当我双击该exe时,任务管理器程序中什至没有任何反应。
  2. 然后,我了解了如何通过 Process Explorer 监视依赖于Dll的信息,我发现了其他一些依赖于dll的文件,例如 Qt5Quick Qt5QuickTemplates2.dll , * Qt5QuickControls2.dll **等,以及 msvc2017_64 \ qml 文件夹中的许多Dll。
  3. 我还使用了图表,所以我不会忘记 Qt5Charts.dll

好的,到目前为止,它是可行的。提示:如此之多的Qt依赖于Dll,我很疲惫。提示:将qml floder复制到运行时目录,然后运行exe,然后将其所有 (ps:似乎无法删除qml \ QtQuick中的一些空置文件,如果我将其删除,双击该exe文件将什么也没有发生。)