Qt5应用程序无法运行

时间:2014-10-15 16:25:17

标签: c++ qt dll

我使用Qt 5创建了一个应用程序(使用Visual Studio' 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

我找到的最相关的帖子是Application deployed with QT5 libraries does not start on Windows 7 - 但解决方案(包括qwindows.dll和qminimal.dll)无法正常工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

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

由于您的exe搜索LibraryPaths,您的开发机器通常不会在启动和运行其qt插件时遇到问题。 http://qt-project.org/doc/qt-5/qcoreapplication.html#libraryPaths

Dependency Walker将完成这项工作,向您展示您需要知道的内容,但输出相当复杂,难以破译。

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

  1. 退出Qt Creator。

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

    C:/Qt/5.3/msvc2010_opengl/
    
  3. 创建plugins文件夹的副本(Copy of plugins文件夹与plugins在同一路径中,因此在这种情况下其父级为msvc2010_opengl

  4. enter image description here

    1. 在另一个资源管理器窗口中,在您的开发计算机上打开您的exe(Qt程序)。对程序进行最小测试,以确保主要功能正常运行。 (在实例化使用它们的QObject之前,许多运行时插件不会被加载。)

    2. 删除Qt路径中的plugins文件夹。

    3. Windows将锁定您的exe使用的所有dll,并阻止您删除多个dll。单击“跳过”以查看所有不可删除的文件夹和文件。

    4. enter image description here

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

      2. 现在,当你完成所有工作时,你会留下一个plugins文件夹的骨架,只显示你的应用程序正在使用的dll。

      3. 它可能包含以下文件夹:accessibilityplatformsimageformats等等,具体取决于您在.pro文件中包含的内容。

      4. 关闭你的exe。

      5. 将已剥离的插件文件夹的内容复制到您的exe旁边。

      6. 恢复插件文件夹的备份(从Qt路径中删除已剥离的插件文件夹并恢复Copy of plugins)。

      7. 现在你应该好好去。在非开发机器上进行测试。

      8. 关于VS C ++运行时的注意事项

        同样在某些机器上使用MSVC部署Qt时,msvcrXXX.dll与系统其余部分使用的不匹配。我们不是在我们办公室的安装程序中部署msvcrXXX.dll,而是包含Microsoft C ++ Redistributable Installer并在安装脚本中运行它。在一些机器上,他们已经破坏了Redistributables,我们不得不强制安装可再发行组件来修复我们有时会得到的“从服务器引用”错误。

        您可以在Latest Supported Visual C++ Downloads找到MSVC Redistributables的最新安装程序。

        希望有所帮助。

答案 1 :(得分:0)

您必须先部署应用程序,然后才能手动复制dll文件。

要在Windows上部署Qt应用程序,可以使用 windeployqt ,该软件位于:

/ bin / windeployqt

示例批处理脚本可能会在部署Qt应用程序(使用PowerShell或cmd运行)时起作用:

C:\Qt\Qt5.x.x\5.x.x\MSVCx_x\bin\windeployqt <APP_PATH>/myapp.exe
  1. 在部署应用程序之后,尝试运行您的 myapp.exe ,并注意缺少哪些dll文件。

  2. 将所需的dll文件从 QTDIR / bin 复制/粘贴到您的

有关部署的更多信息: