Qwindows.dll从未在中找到

Qwindows.dll Never Found In

本文关键字:dll Qwindows      更新时间:2023-10-16

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

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

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

使用windeployqt:

转到QT安装文件夹,如下所示:C:QT5.5msvc2013bin这里有一个.exe,名为windeployqt,从这里启动cmd。(ctrl+shift+右键单击)。然后键入以下内容:windeploy [full path to your release map]

Qt安装目录不应该在PATH环境中。然后不需要重命名Qt-dir(与OSX相反)。在开发过程中,您可以从Qt Creator内部运行您的应用程序。

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

你可以按照皮姆的建议使用windeployqt。我们更喜欢自己控制将要部署的dll。

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

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

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

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 );   
        } 

在某些情况下,"平台"还必须包含qminimal.dll:https://stackoverflow.com/a/14144077/4149835

platforms/qwindows.dll
platforms/qminimal.dll