如何在其他计算机上运行Qt 5应用程序(Windows 7)

12
我在Windows 7 Ultimate上使用Qt 5.0.2开发了一个简单的应用程序,编译器为Qt Creator和MSVC2012_64bit。但我无法将我的应用程序移植到其他计算机上,因为它不能正常工作。Qt应用程序需要一些DLL文件,而我找不到这些文件。依赖项浏览器显示以下.dll文件未找到。我该在哪里找到它们?为什么这个问题如此普遍?许多人抱怨无法使他们使用Qt开发的.exe文件在其他计算机上运行。 编辑1: 顺便说一下,当我从互联网下载并添加了DCOMP.dll时,未找到的DLL文件数量增加了2-3倍 :) 编辑2: 另请注意,在其他计算机上(Windows 7 Home Premium),当我双击exe文件时,它会显示正在加载但没有效果,没有错误,什么都没有。

所以在你的电脑上它能正常工作?为什么不使用进程资源管理器来获取运行时加载的所有DLL列表呢? - sashoalm
当然可以!但是我无法在其他计算机上启动exe文件。而且我在我的电脑上找不到这些dll文件的任何位置。太奇怪了。 - Narek
为什么不使用进程资源管理器(Process Explorer)获取运行时加载的所有DLL列表呢?比如在你的电脑上启动程序,它应该可以工作。我是说,在你的电脑上安装进程资源管理器,并且这样做。此外,MSVC没有打印出所有加载的库吗?就像这些消息 'rundll32.exe': Loaded 'C:\Windows\System32\dwmapi.dll', Cannot find or open the PDB file - sashoalm
我已安装了进程资源管理器。它如何帮助查看加载哪些 DLL 以及来自何处的 DLL? - Narek
好的,我找到了。Ctrl+D。但是那些dll文件大约有50个:( - Narek
显示剩余3条评论
4个回答

10

这是我所需的dll列表,同时我已复制了 C:\Qt\Qt5.0.2\5.0.2\mingw47_32\plugins\platforms 文件夹:

图片描述

只需要这些,它对我有效。顺便说一下,我使用的是 Windows 7 Ultimate 64x 和 Qt 5.0.2 for Windows 32-bit (MinGW 4.7, 650 MB) 包。

编辑:您可能还需要复制 QtCreator 的 .dll文件,并且您可能需要拥有一个名为 qt.conf 的文件,其中包含以下内容(从 @Renato的答案中复制):

[Paths]

Libraries=./platforms

8
只需将文件qt.conf添加到您的应用程序目录中,并具有以下内容。
[Paths]

Libraries=./platforms

然后将"platforms"子目录复制到相同的应用程序目录中,该子目录可以在目录C:\Qt\Qt5.1.1\Tools\QtCreator\bin中找到。

就这样。

这是因为qtcore.dll使用了您的qt安装的内部路径进行编译。(我不知道为什么!)自从qt.conf在应用程序启动时qtcore总是会读取它,"platforms"库也将被包含,并且在任何主机上应用程序都能正常工作。

警告:qtcore和platforms子目录必须来自同一qt安装。

抱歉我的英语不好,但解决方案很有效。


你救了我的夜晚,谢谢。请某天接受一只熊。 - Erowlin

3

最近Qt(至少从Qt 5.2开始)附带了“windeployqt.exe”,当指向编译后的程序时(如果你和我一样使用了QML文件,则需添加额外的参数“--qmldir path/to/QML/files”用于Qt Quick程序),应该会将所有必需的DLL文件输出到与编译后的程序相同的目录中。例如,对于本地构建机器的个人而言,我执行了以下类似的操作:

    windeployqt --qmldir C:\Code\AppSource C:\Code\build-msvc2010\release

这是使用Qt 5.5,我将Qt \bin目录添加到了$PATH中(或者在Windows中,应该是%PATH%)。尽管我也用过5.2和5.3版本,但是这个方法仍然适用。
如果使用MSVC作为编译器,我记得我仍需要手动复制那些DLL文件(在我的情况下是msvc2010,所以是msvcp100.dll和msvcr100.dll),但是我可能记错了。

1
windeployqt 应该在您的输出文件夹中创建一个 vcredist_x86.exe,可在目标系统上运行。这是处理缺少 msvc100.dll 文件等问题的首选方式(手动复制这些文件被视为不良做法)。---- 此外,如果您想将代码集移动到新系统并保持清晰整洁,可以将 yourapp.exe 文件单独移到新文件夹中,并在那里运行 windeployqt,这样应该只会带入另一台计算机上实际所需的文件。 - jp36
2
使用MVC++ 2015,windeployqt无法生成vcredist_x86.exe或vcredist_x64.exe文件! - SuB

0

感谢大家的帮助!

对我来说,仅仅将qwindows.dll添加到/platforms目录中并不够。
最终,我通过直接复制整个plugins目录到我的应用程序二进制目录,并创建一个包含以下内容的qt.conf文件来使一切正常运行:

[Paths]
Plugins=./plugins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接