我用Qt5.3.1编写了一个程序,并在我的开发机器上运行,在那里它运行得很好。我将所有必要的.dll文件复制到我的.exe所在的文件夹中。这些是:
- Qt5Widgets.dll
- Qt5Network.dll
- Qt5Guid.dll
- Qt5Core.dll
- icudt51.dll
- icuin51.dll
- icuuc51.dll
- libgcc_s_dw2-1.dll
- libwinpthread-1.dll
- libstdc++-6.dll
现在我想在一台没有安装Qt的机器上运行这个程序。我该怎么做?用户不应该仅仅为了使用程序而安装IDE,对吧?
其工作的开发机器的详细信息:
- Windows 8
- 问题5.3.1
部署平台为:
- Windows Vista
- 未安装Qt,但已安装所有必要的.dll
我得到的错误是第一个:
此应用程序无法启动,因为它无法找到或加载Qt平台插件"windows"。重新安装应用程序可以解决此问题。
下一条错误消息是:
此应用程序以异常方式请求运行时终止。请联系支持。
然后程序崩溃但是如果我安装Qt5.3.1,它可以工作。因此,它与c:/Qt
目录
This application failed to start because it could not find or load the Qt platform plugin "windows".
对于这个问题,您应该将插件{QTSDK}/plugins/platforms/qwindows.dll
复制到{YOUR_EXE_DIR}/platforms/qwindows.dll
。
简单的答案是,您要么需要进行静态构建,要么需要重新分发Qt共享库DLL。如果你正在寻找更小的文件大小,静态构建通常会更好,但如果你在LGPL许可证下使用Qt5,这种方法可能会产生法律影响。我不是律师,但你可以在LGPL第4.1节中阅读LGPL链接规则。
详细的答案是,您应该阅读通用Qt5部署指南和Qt5 for Windows部署指南。这些都很详细。
更好的解决方案是使用Qt SDK应用程序"windeployqt"。它用于将所有必需的dll和插件复制到基于目标平台的应用程序文件夹中。然后你可以在另一台计算机上运行它。以下是文档:https://doc.qt.io/Qt-5/windows-deployment.html.
例如,如果可执行文件是使用mingw53_32构建的,并且可执行文件位于"C:\example_qtapp":中
QT_INSTALL_DIRminqw53_32binwindeployqt.exe c:example_qtapp
我也遇到过这个问题,
在您的Qt目录中,使用正确的Qt版本C: \Qt\Qt5.2.1\5.2.1 \mingw48_32\plugins\platforms\
将qwindows.dll复制到可执行文件旁边的新文件夹中,这样您的列表将是
- Qt5Widgets.dll
- Qt5Network.dll
- Qt5Guid.dll
- Qt5Core.dll
- icudt51.dll
- icuin51.dll
- icuuc51.dll
- libgcc_s_dw2-1.dll
- libwinpthread-1.dll
- libstdc++-6.dll
- 平台/qwindows.dll
您应该将Qt DLL放在可执行文件的发布版本中。这些是Qt5Core.dll
、Qt5Gui.dll
,可能还有您使用过的其他模块。这些dll文件位于bin文件夹中已安装的Qt目录中。如果您使用的是MinGW,还应该放置LIBGCC_S_DW2-1.DLL
、MINGWM10.DLL
和LIBSTDC++-6.dll
。
如果你正在使用插件,你应该把它们的dll放在exe旁边一个名为plugins
的文件夹中。如果使用图标和图像,您应该将它们的dll(如qico.dll
和qsvg.dll
(放在名为imageformats
的文件夹中。
如果有Qt dll,它们应该可以工作。我的猜测是您缺少IDE的运行时库/dll。例如,如果您使用Visual Studio 2010作为IDE,则需要安装VS2010 Redistributable x86/x64链接,具体取决于您的体系结构。
您还应该将{QTSDK}/plugins复制到可执行文件所在的目录中。然后在同一位置创建qt.conf(带有可执行文件(,内容如下:
[Paths]
Plugins=plugins
然后,运行您的程序。我在linux上也做了同样的操作。
在应用程序文件夹中,按住SHIFT键并用鼠标右键单击。你会看到-在这里打开命令窗口
- 单击此处的"打开命令窗口">
- TYPE windeployqt.exe app_name.exe--参数和HIT ENTER
示例:
windeployqt.exe APP_NAME.EXE --release --no-translations --no-system-d3d-compiler --no-compiler-runtime --no-angle --no-opengl-sw