QT在部署后缺少dll

QT missing dll after deploy

本文关键字:dll 部署 QT      更新时间:2023-10-16

我已经从QT中复制了所需的所有dll,并且我的应用程序在Windows服务器上运行良好。

然而,当试图在Windows7盒子上运行它时,我得到了以下消息:

此应用程序无法启动,因为它找不到或加载Qt平台插件"windows"。

重新安装应用程序可以解决此问题。

你知道我在这里错过了什么吗?

我不久前就为这个问题挠头了。事实证明,这不是由于缺少qwindows.dll引起的,而是libEGL.dlllibGLESv2.dll中的一个引起的。这很棘手,因为依赖性walker并没有将这些lib显示为直接依赖项。

如果你想在你的开发机器上测试你的应用程序是否有所有需要的库,请将控制台问题SET PATH=cd启动到你的应用目录并运行它

这是我的应用程序正在使用的dll的完整列表(仅Qt 5.2/QtQuick应用程序,其余为C++)。QtQuick很好,但Qt依赖关系的大小有点可怕:

icu*.dll-取决于您是否使用ICU进行了编译libEGL.dlllibGLESv2.dllQt5Core.dllQt5Gui.dllQt5Network.dllQt5Qml.dllQt5Quick.dllQt5Widgets.dll

广泛使用的解决方案将所有必要的库放在应用程序的文件夹中
库应用程序需要什么
运行应用程序并查看错误消息:

The program can't start because <Library name> is missing from your computer.  
Try reinstalling the program to fix this problem

库集依赖于Qt版本。运行几次应用程序,每次复制所需的库,您就会发现应用程序需要什么
在我的情况下(问题5.2.1)有

icudt51.dll, 
icuin51.dll, 
icuuc51.dll, 
libgcc_s_dw2-1.dll, 
libstdc++-6.dll, 
libwinpthread-1.dll, 
Qt5Core.dll, 
Qt5Gui.dll, 
Qt5Widgets.dll.

您可以在Qt安装文件夹中找到的所有库。但不要使用ToolsQtCreator文件夹中的库,因为QtCreator有这些库的另一个版本!

如果出现错误:
此应用程序无法启动,因为它找不到或无法加载Qt平台插件windows。重新安装应用程序可以解决此问题
您应该创建文件夹platforms并将qwindows.dll复制到其中。
如果您仍然有错误,您应该在应用程序的文件夹中创建qt.conf文件,其中包含内容:

[Paths]
Plugins=plugins

此解决方案在https://qt-project.org/forums/viewthread/37265有关qt.conf的更多信息,请访问http://qt-project.org/doc/qt-5/qt-conf.html

在Qt的最新版本中,您可以找到部署工具(自5.2起)。该工具可以为应用程序找到必要的库,并将其复制到应用程序文件夹中。你可以这样运行它:

call c:QtQtX.Y.ZX.Y.Zmingw48_32binqtenv2.bat
cd /d "c:pathtoyourapplicationfolder"
windeployqt.exe your_application.exe

一般来说,它运行良好。但我注意到有些库并没有被复制,但你可以通过在帖子开始时描述的方法找到。更多有用信息,请访问http://qt-project.org/doc/qt-5/windows-deployment.html

在极少数情况下,如果某个库丢失但没有出现在上面的错误消息中,您可能会出现此错误。示例:问题5.1.1:应用程序无法启动,因为平台插件";窗口";缺少
我没有遇到这种情况,所以我不能再多说了。