Qwindows.dll未找到。

3

当我在其他电脑上运行我的应用程序并重新命名Qt目录时,就会出现“此应用程序未能启动,因为它无法找到或加载Qt平台插件“windows”。重新安装该应用程序可能会解决此问题。” 下面是包含应用程序的文件夹的布局:

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

有没有可能强制将 seek qwindows.dll 查找路径设置为我的应用程序目录,而不是 QT 目录?

你的应用程序将首先在其文件夹中查找,如果未找到,则会在其他地方查找。尝试将其从平台文件夹移动到应用程序文件夹中。 - Michael Vincent
4个回答

3

使用windeployqt:

进入QT安装文件夹,例如:C:\QT\5.5\msvc2013\bin,这里有一个名为windeployqt.exe文件。从此处启动你的cmd(ctrl+shift+rightclick),然后输入以下命令:windeploy [你发布地图的完整路径]


2
Qt安装目录不应该在您的PATH环境中。因此,不需要重命名Qt目录(与OSX相反)。在开发期间,可以在Qt Creator内运行应用程序。
如果在Qt Creator之外运行应用程序,例如在资源管理器中双击它,则Windows还会自动包括应用程序目录在其搜索路径中,事实上,这是它将查找的第一个位置。如果它无法在那里找到dll,或者如果它是错误版本(如32/64位),它将尝试在其他地方找到它。不需要设置或加载库路径。使用依赖项检查器查找所需的dll,然后从Qt Install目录复制它们,或者在需要msvc dll的情况下从Microsoft vc-redistributable exe中提取它们(我认为您缺少msvcr dll)。最好使用qmake脚本进行所有这些dll复制。哪个插件Qt dll你的应用程序需要是经过试错的问题。对于一些缺少的插件dll,操作系统将在运行应用程序时发出警告。
您可以按照Pim的建议使用windeployqt。我们更喜欢自己控制将要部署的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。

您对PATH的陈述是不正确的。除非您使用qt.conf文件,否则Qt会尝试在(硬编码路径到)Qt安装目录中查找dll文件,即使它没有设置在PATH中。即使您已经部署了qwindows.dll副本与您的应用程序一起,它仍然从那里加载。 - Andre

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接