从未找到 Qwindows.dll

问题描述 投票:0回答:5

当我在其他机器上运行我的应用程序时,如果我重命名 Qt 目录,我会收到“此应用程序无法启动,因为它无法找到或加载 Qt 平台插件“windows”。重新安装应用程序可能会解决此问题。 ” 这是保存应用程序的文件夹的布局:

app.exe
icudt53.dll
icuin53.dll
icuuc53.dll
Qt5Core.dll
Qt5Gui.dll
Qt5Widgets.dll
msvcp110.dll
platforms/qwindows.dll

是否有可能强制在我的应用程序目录而不是 QT 目录中查找 qwindows.dll?

c++ windows visual-studio qt dll
5个回答
3
投票

使用windeployqt:

转到您的 QT 安装文件夹,如下所示:

C:\QT\5.5\msvc2013\bin
这里有一个
.exe
,名为
windeployqt
从这里启动您的 cmd。 (ctrl+shift+右键单击)。然后输入以下内容:
windeploy [full path to your release map]


2
投票

Qt 安装目录不应位于您的 PATH 环境中。那么就不需要重命名 Qt 目录(与 OSX 相比)。在开发过程中,您可以从 Qt Creator 内部运行您的应用程序。

如果您在 Qt Creator 之外运行应用程序,例如在资源管理器中双击它,Windows 也会自动在其搜索路径中包含应用程序目录,事实上,它是它将查找的第一个位置。如果它在那里找不到 dll,或者版本错误(如 32/64 位),它会尝试在其他地方找到它。无需设置或加载库路径。使用 dependency walker 找出您需要的 dll。从 Qt 安装目录复制它们,或者从 Microsoft vc-redistributable exe 中提取它们,以防需要 msvc dll(我认为您缺少 msvcr dll)。所有这些 dll 复制最好使用 qmake 脚本来完成。您的应用程序需要哪个 Qt dll 插件是一个反复试验的问题。对于某些缺少的插件 dll,操作系统在运行应用程序时会发出警告。

您可以使用

windeployqt
遵循 Pim 的建议。我们更喜欢自己控制要部署的 dll。

您的插件平台位置

qwindows.dll
完全正确。应用程序不会加载插件 dll,但 Qt dll 会加载插件 dll,并且这些 Qt dll 确切地知道在哪里期望并找到它们。我可以想象您遇到问题的唯一原因是您的应用程序加载了错误的 Qt dll 并且该 dll 找不到平台 dll。不要忘记许多其他多平台应用程序也使用 Qt。他们可能已将 Qt dll 转储到 system32 目录中,或者可能通过将应用程序目录添加到 PATH 环境来公开它们。欢迎来到 dll 地狱。

有一种简单的方法可以对抗 dll 地狱:从您的应用程序目录中删除(并恢复)该 dll,然后每次双击您的应用程序。如果 Windows 没有抱怨缺少该 dll,那么您刚刚删除的 dll 不是正确的版本。如果这仍然没有帮助,您可能错过了您的应用程序正在使用的另一个 Qt dll。


1
投票

我通过在代码中设置路径解决了这个问题。

TCHAR path[_MAX_PATH+1]; 
GetModuleFileName(GetModuleHandle("myApp.dll"),path,sizeof(path)/sizeof(path[0])); 
std::string runningFolder =  ExtractFileDir( path ); 
QStringList paths;  
paths.append(runningFolder.c_str());
QCoreApplication::setLibraryPaths(paths);
app = static_cast <QApplication *> (QApplication::instance());
        if ( app == NULL )
        {
            int argc = 0;
            app = new QApplication( argc, NULL );   
        } 

0
投票

在某些情况下,“platforms”还必须包含qminimal.dllhttps://stackoverflow.com/a/14144077/4149835

平台/qwindows.dll
平台/qminimal.dll


0
投票

我发现 OBS 64 位的 QSVGICON Qt6 扩展公司名称是 The QT Company Ltd.,描述为 C++ 应用程序部署框架 Cert.Signature Hugh Baily

© www.soinside.com 2019 - 2024. All rights reserved.