Qwindows.dll从未找到过

时间:2015-11-11 09:51:02

标签: c++ windows visual-studio qt dll

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

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

是否有可能强制搜索qwindows.dll用于我的应用程序目录而不是QT目录?

4 个答案:

答案 0 :(得分:1)

使用windeployqt:

转到您的QT安装文件夹,如下所示:C:\QT\5.5\msvc2013\bin此处有一个名为.exe的{​​{1}}从此处启动您的cmd。 (CTRL + SHIFT +右击)。然后输入以下内容: windeployqt

答案 1 :(得分: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 );   
        } 

答案 2 :(得分:1)

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

如果您在Qt Creator之外运行应用程序,例如在资源管理器中双击它,Windows也会自动在其搜索路径中包含应用程序目录,事实上它是第一个看起来的位置。如果它在那里找不到dll,或者它是错误的版本(如32 / 64bit),它会尝试在其他地方找到它。无需设置或加载库路径。使用依赖性walker来找出你需要的dll。从Qt Install目录复制它们或从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 hell。

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

答案 3 :(得分:0)

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

  

platforms / qwindows.dll
platforms / qminimal.dll