Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在其他计算机(Windows 7)上运行Qt 5应用程序_C++_Windows_Qt_Dll_Windows 7 X64 - Fatal编程技术网

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

C++ 如何在其他计算机(Windows 7)上运行Qt 5应用程序,c++,windows,qt,dll,windows-7-x64,C++,Windows,Qt,Dll,Windows 7 X64,我在Windows7 Ultimate上用Qt5.0.2开发了一个简单的应用程序。作为编译器,QtCreator使用MSVC2012_64位。我无法将我的应用程序移到其他计算机上。它不起作用。Qt应用程序需要我找不到的DLL。依赖项资源管理器认为找不到下面的.dlls。我在哪里能找到它们?为什么这个问题如此广泛?所有的人都抱怨说,他们无法让用Qt开发的.exe在其他计算机上工作。 EDIT1:顺便说一句,当我添加从internet下载的DCOMP.dll时,找不到的dll比现在多2-3倍:)

我在Windows7 Ultimate上用Qt5.0.2开发了一个简单的应用程序。作为编译器,QtCreator使用MSVC2012_64位。我无法将我的应用程序移到其他计算机上。它不起作用。Qt应用程序需要我找不到的DLL。依赖项资源管理器认为找不到下面的
.dll
s。我在哪里能找到它们?为什么这个问题如此广泛?所有的人都抱怨说,他们无法让用Qt开发的
.exe
在其他计算机上工作。

EDIT1:顺便说一句,当我添加从internet下载的
DCOMP.dll
时,找不到的dll比现在多2-3倍:)


EDIT2:还请注意,在其他计算机(Windows 7 Home Premium)上,当我双击exe文件时,它显示该文件已加载,没有任何效果,没有任何错误

这是我需要的DLL列表,我还复制了
C:\Qt\Qt5.0.2\5.0.2\mingw47\u 32\plugins\platforms
文件夹:

就这样,它对我起了作用。顺便说一句,我使用Windows7Ultimate64X和Qt5.0.2作为Qt的32位(MingW4.7650MB)软件包

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


只需使用以下内容将文件
qt.conf
添加到app dir

[Paths]

Libraries=./platforms
然后将目录C:\Qt\Qt5.1.1\Tools\QtCreator\bin中的子目录“platforms”复制到同一个app dir

就这些

这就解决了问题,因为qtcore.dll是用qt安装的内部路径编译的。(我不知道是什么!)。因为,当应用程序启动时,qt.conf始终由qtcore读取。将包括“平台”中的库,并且该应用程序在任何主机上都可以工作

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


很抱歉,这是一个很好的解决方案。

谢谢大家的帮助

对我来说,只是将
qwindows.dll
添加到
/platforms
目录中,不知何故并没有切断它。
通过将整个plugins目录直接复制到我的应用程序的二进制目录,并创建一个包含以下内容的
qt.conf
文件,我最终实现了所有功能:

[Paths]
Plugins=./plugins
如今的Qt(至少从Qt5.2开始,如果不是更早的话)附带了“windeployqt.exe”,当它指向编译后的程序时(如果像我一样,您使用它们作为Qt快速程序的“-qmldir path/to/QML/files”的附加参数)应该将所有必需的DLL吐出到编译程序当前所在的同一目录中。例如,对于我自己,在本地构建机器上,我运行了以下内容:

    windeployqt --qmldir C:\Code\AppSource C:\Code\build-msvc2010\release
这是使用Qt5.5在我的$PATH(或者,我猜用Windows的说法是,%PATH%;)中的Qt\bin目录,尽管我在5.2和5.3中也做过同样的操作


IIRC如果使用MSVC作为编译器,我仍然需要手动复制那些dll(在我的例子中是msvc2010,所以是msvcp100.dll和msvcr100.dll),但我可能记错了。

那么它在你的计算机上工作了?为什么不使用Process Explorer获取运行时加载的所有DLL的列表?是的,当然!但我无法在其他计算机上启动exe。我在我的电脑里找不到这些dll。真奇怪。为什么不使用Process Explorer获取运行时加载的所有DLL的列表?比如,当你在你的计算机上启动你的程序时,它大概在哪里工作。我的意思是,在您的计算机上安装Process Explorer,然后这样做。另外,MSVC没有打印出所有加载的库,比如那些消息
'rundll32.exe':加载的'C:\Windows\System32\dwmapi.dll',找不到或打开PDB文件
,我已经安装了process explorer。查看哪些DLL以及从何处加载有何帮助?好的,好的,我已经找到了。Ctrl+D。但这些dll大约为50:(你救了我一晚,谢谢。请改天接受一只熊。windeployqt应该在输出文件夹中创建一个vcredist_x86.exe,可以在目标系统上运行。这是处理缺少的msvc100.dll文件等的首选方法(例如,不赞成手动复制这些文件).----此外,如果您想将一组更干净的代码移动到新系统,您可以将yourapp.exe文件移动到一个新文件夹中,并在该文件夹中运行windeployqt,这应该只会带来您在另一台计算机上实际需要的文件。使用MVC++2015,
windeployqt
不会生成vcredist_x86.exe或vcredist_x64.exe文件!
    windeployqt --qmldir C:\Code\AppSource C:\Code\build-msvc2010\release