当我在其他计算机上运行我的应用程序并且如果我重命名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目录?
答案 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