我使用Qt 5创建了一个应用程序(使用Visual Studio' 12编译)。它适用于我的机器。
但是,当我尝试在另一台机器上运行它时,它不起作用。我通过cmd收集的输出产生了一个空文件。
目录结构如下:
我找到的最相关的帖子是Application deployed with QT5 libraries does not start on Windows 7 - 但解决方案(包括qwindows.dll和qminimal.dll)无法正常工作。
有什么想法吗?
答案 0 :(得分:3)
Windows会在Qt Creator外部双击你的exe时报告一些启动错误。看起来你已经包含了大部分或全部这些内容。
由于您的exe搜索LibraryPaths
,您的开发机器通常不会在启动和运行其qt插件时遇到问题。 http://qt-project.org/doc/qt-5/qcoreapplication.html#libraryPaths
Dependency Walker将完成这项工作,向您展示您需要知道的内容,但输出相当复杂,难以破译。
我发现在Windows上运行时使用的Qt插件dll的最简单方法是执行以下操作:
退出Qt Creator。
在资源管理器中使用Qt打开正在使用的编译器的安装文件夹。例如:
C:/Qt/5.3/msvc2010_opengl/
创建plugins
文件夹的副本(Copy of plugins
文件夹与plugins
在同一路径中,因此在这种情况下其父级为msvc2010_opengl
在另一个资源管理器窗口中,在您的开发计算机上打开您的exe(Qt程序)。对程序进行最小测试,以确保主要功能正常运行。 (在实例化使用它们的QObject之前,许多运行时插件不会被加载。)
删除Qt路径中的plugins
文件夹。
Windows将锁定您的exe使用的所有dll,并阻止您删除多个dll。单击“跳过”以查看所有不可删除的文件夹和文件。
现在进入之前无法删除的每个文件夹,并尝试删除每个文件夹中的所有单个dll。点击跳过所有不可删除的dll。
现在,当你完成所有工作时,你会留下一个plugins文件夹的骨架,只显示你的应用程序正在使用的dll。
它可能包含以下文件夹:accessibility
,platforms
和imageformats
等等,具体取决于您在.pro
文件中包含的内容。
关闭你的exe。
将已剥离的插件文件夹的内容复制到您的exe旁边。
恢复插件文件夹的备份(从Qt路径中删除已剥离的插件文件夹并恢复Copy of plugins
)。
现在你应该好好去。在非开发机器上进行测试。
同样在某些机器上使用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
在部署应用程序之后,尝试运行您的 myapp.exe ,并注意缺少哪些dll文件。
将所需的dll文件从 QTDIR / bin 复制/粘贴到您的
有关部署的更多信息: