Qt 应用程序发布 exe 未运行

Posted

技术标签:

【中文标题】Qt 应用程序发布 exe 未运行【英文标题】:Qt application release exe not running 【发布时间】:2019-02-23 22:37:11 【问题描述】:

我在 Qt 中构建了一个非常简单的计算器。当我从 qt creator 以发布模式运行它时,一切正常。但是,当我转到发布文件夹并运行它时,它会给出 QT5Core.dll、QT5Widgets.dll 和 QT5Gui.dll 未找到。在那里运行windeployqt后:

windeployqt .

所有的 dll 都被添加了。但是,它会给出错误 VCRUNTIME140_APP.dll 和 MSVCP140_APP.dll 未找到。将它们复制到文件夹后。 exe在双击时没有给出任何错误,但只是没有启动。我该怎么办? 我找到了这个解决方案here,但是我在应用程序目录中找不到任何 qml 文件。

我将它创建为 QT 小部件应用程序。我正在使用带有 Visual Studio 2017 和 MSVC2017 64 位桌面套件的 Windows 10。该应用程序是 C++ 语言。

更新: 运行命令

windeployqt Calculator.exe 

将 qt 添加到路径后似乎可以解决问题。即使从路径中删除 qt 后应用程序也能正常工作。将尝试在 vm 中运行应用程序,以确保更加确定。

【问题讨论】:

您说:但是我在应用程序目录中找不到任何 qml 文件,如果您使用的是 .qrc,则不再需要使用 .qml,因为这些嵌入在可执行文件中 从命令提示符运行您的应用程序并检查它是否显示错误消息。 也许您可以只构建带有依赖项的 exe? 请注意,Windows 不会在命令提示符中显示 GUI 应用程序的 stdout 输出。如果你想查看标准输出,你必须调用 AllocConsole() 和 freopen() 来获得一个显示标准输出输出的窗口。 【参考方案1】:

从命令行运行时,将 Qt Bin 目录添加到 PATH。例如:

C:\> PATH=C:\Qt\Qt5.11.0\5.11.0\msvc2017_64\bin;%PATH%

【讨论】:

【参考方案2】:

您可以按照 selbie 的描述解决问题。另一种方法是将丢失的 .dll 文件复制到放置 .exe 的文件夹中。

请看这里https://doc.qt.io/Qt-5/windows-deployment.html#creating-the-application-package:

要部署应用程序,我们必须确保将相关的 Qt DLL(对应于应用程序中使用的 Qt 模块)和 Windows 平台插件 qwindows.dll 以及可执行文件复制到同一目录树在发布子目录中。

【讨论】:

【参考方案3】:

设置变量VCINSTALLDIR,示例:

set VCINSTALLDIR=p:\Programs\Microsoft Visual Studio\2017\Community\VC\

然后下一次运行

windeployqt.exe app.exe

或将 Redist 子文件夹中的 vc_redist.x64.exe 复制到您的应用程序所在的文件夹中。

【讨论】:

【参考方案4】:

正如@mosa 所说,要部署应用程序,我们必须确保复制相关的 Qt DLL(对应于应用程序中使用的 Qt 模块)和 Windows 平台插件 qwindows.dll 以及可执行文件到发布子目录中的同一目录树。

要添加缺少的.dll 文件,首先打开QT MSVC 控制台并输入windeployqt.exe 命令,

然后您必须转到.exe 文件包含的目录。假设我的 .exe 在桌面上,

C:/
cd user/indrajith/desktop

然后您可以使用以下命令添加丢失的 .dll 文件,

 windeployqt.exe --quick.

最后,只需双击您的.exe 文件即可运行该程序。

【讨论】:

以上是关于Qt 应用程序发布 exe 未运行的主要内容,如果未能解决你的问题,请参考以下文章

尝试 Windows 部署 - .exe 文件未打开且没有错误消息

Qt官方开发环境生成的exe发布方式--使用windeployqt(windeployqt是单独的程序,放在低版本qt4目录下也可以运行的)

qt调用外部exe程序并且将exe程序一起打包

QT程序部署

QT5的程序打包发布(打包成exe可执行程序)

QT生成可执行的EXE程序