C++ Qt5应用程序未运行

C++ Qt5应用程序未运行,c++,qt,dll,C++,Qt,Dll,我使用Qt5(用VisualStudio'12编译)创建了一个应用程序。它在我的机器上工作 但是,当我试图在另一台机器上运行它时,它不起作用。我通过cmd收集的输出生成了一个空文件 目录结构如下: myapp.exe icudt52.dll icuin52.dll icuuc52.dll libEGL.dll libGLESv2.dll msvcp120.dll msvcr120.dll Qt5Core.dll Qt5Gui.dll 平台/qminimal.dll 平台/qwindows.dl

我使用Qt5(用VisualStudio'12编译)创建了一个应用程序。它在我的机器上工作

但是,当我试图在另一台机器上运行它时,它不起作用。我通过cmd收集的输出生成了一个空文件

目录结构如下:

  • myapp.exe
  • icudt52.dll
  • icuin52.dll
  • icuuc52.dll
  • libEGL.dll
  • libGLESv2.dll
  • msvcp120.dll
  • msvcr120.dll
  • Qt5Core.dll
  • Qt5Gui.dll
  • 平台/qminimal.dll
  • 平台/qwindows.dll
我找到的最相关的帖子是-但是解决方案(包括qwindows.dll和qminimal.dll)不起作用


有什么想法吗?

当您在Qt Creator外双击exe时,Windows会报告一些启动错误。看起来您已经包含了大部分或所有这些内容

由于exe搜索的是
librarypath
,因此开发机器在启动和运行其qt插件时通常不会出现问题

将完成这项工作,并向您展示您需要知道的内容,但输出非常复杂,可能难以解读

我发现,要了解我在Windows上运行时使用的Qt插件DLL,最简单的方法是执行以下操作:

  • 退出Qt创建者

  • 在资源管理器中打开正在与Qt一起使用的编译器的安装文件夹。例如:

    C:/Qt/5.3/msvc2010_opengl/
    
  • 在适当的位置创建
    plugins
    文件夹的副本(
    copyofplugins
    文件夹与
    plugins
    路径相同,因此在本例中它的父文件夹是
    msvc2010\u opengl

  • 在另一个资源管理器窗口中,打开开发计算机上的exe(Qt程序)。对您的程序运行最低限度的测试,以确保主要功能正常工作。(许多运行时插件只有在使用它们的QObject被实例化后才能加载)

  • 删除Qt路径中的
    plugins
    文件夹

  • Windows将锁定exe正在使用的所有DLL,并阻止您删除多个DLL。单击所有不可删除的文件夹和文件的“跳过”

  • 现在进入以前无法删除的每个文件夹,并尝试删除每个文件夹中的所有单个dll。单击跳过所有不可删除的DLL

  • 现在,当您完成所有操作后,剩下的是一个插件文件夹的框架,只显示您的应用程序正在使用的DLL

  • 它可能包括以下文件夹:
    可访问性
    平台
    图像格式
    等等,具体取决于您在
    .pro
    文件中包含的内容

  • 关闭你的exe

  • 将精简插件文件夹的内容复制到exe旁边

  • 恢复插件文件夹的备份(从Qt路径中删除精简的插件文件夹,并恢复插件的副本)

  • 现在你该走了。在非开发机器上进行测试

  • 关于VS C++运行时的一点注记 在某些机器上,当使用MSVC部署Qt时,msvcrXXX.dll与系统其他部分使用的不匹配。代替部署MSVCRXX.DLL,而是在我们办公室的安装程序中,我们包括微软C++可重分配安装程序,并在安装脚本中运行它。在一些机器上,他们破坏了可再发行文件,我们不得不强制安装可再发行文件,以修复我们有时会遇到的“从服务器引用”错误

    您可以在此处找到MSVC可再发行文件的最新安装程序


    希望对您有所帮助。

    在手动复制dll文件之前,您必须先部署应用程序。

    要在Windows上部署Qt应用程序,可以使用windeployqt,可在以下位置找到:

    /bin/windeployqt

    示例批处理脚本可用于部署Qt应用程序(使用PowerShell或cmd运行):

    C:\Qt\Qt5.x.x\5.x.x\MSVCx\u x\bin\windeployqt
    

  • 试着运行它,查看部署中缺少哪些库。您需要遵循Qt for Windows部署指南:谢谢您的精彩回答!它起作用了。显然,我的问题是我使用了错误的qwindows.dll。有一天,我会编写这个脚本,或者在Qt中制作一个工具来完成这些步骤,并制作一个Qt Creator插件或其他东西,以便更容易在Windows上部署。几年前第一次弄明白这一点是相当痛苦的。祝你好运
    C:\Qt\Qt5.x.x\5.x.x\MSVCx_x\bin\windeployqt <APP_PATH>/myapp.exe