【发布时间】:2023-03-13 23:34:01
【问题描述】:
我正在将我们的应用程序与所需的 DLL 部署在同一个文件夹中。 加上平台文件夹中的 qwindows.dll。
这真的很棒,没有任何 Qt 安装的机器也是如此。
直到昨天,当我将我的 Qt 更新到 5.5.1 时。 现在,曾经使用 Qt 5.5.0 构建的所有应用程序都停止工作并显示众所周知的错误:“无法找到或加载 Qt 平台插件 'windows'”。
当我将我的 Qt 文件夹 (C:\Qt) 重命名为其他名称时,一切都恢复正常了。
对 Dependancy Walker 的进一步调查表明,应用程序确实在我的 C:\Qt 文件夹中查找平台 dll。但他们发现更新/不同的版本并抛出错误。
GetProcAddress(0xxxx [ADVAPI32.DLL], "SystemFunction036") called from "MSVCR120.DLL" at address 0xxxx and returned 0x00007FFB269C1050.
LoadLibraryW("C:\Qt\5.5\msvc2013_64\plugins\platforms\qwindows.dll") called from "QT5CORE.DLL" at address 0xxxx.
Loaded "QWINDOWS.DLL" at address 0xxxx. Successfully hooked module.
Loaded "WINMM.DLL" at address 0xxxx. Successfully hooked module.
Loaded "OLEAUT32.DLL" at address 0xxxx. Successfully hooked module.
Loaded "WINMMBASE.DLL" at address 0xxxx. Successfully hooked module.
Loaded "DEVOBJ.DLL" at address 0xxxx. Successfully hooked module.
Unloaded "QWINDOWS.DLL" at address 0xxxx.
Unloaded "OLEAUT32.DLL" at address 0xxxx.
Unloaded "WINMM.DLL" at address 0xxxx.
Unloaded "WINMMBASE.DLL" at address 0xxxx.
Unloaded "DEVOBJ.DLL" at address 0xxxx.
LoadLibraryW("C:\Qt\5.5\msvc2013_64\plugins\platforms\qwindows.dll") returned NULL. Error: Die angegebene Prozedur wurde nicht gefunden (127).
现在,如果重命名 C:\Qt 文件夹,应用程序将无法在其中找到它,并像往常一样使用 ./platforms/ 中的 qwindows.dll。
现在的问题是,是否需要这种行为? 它不应该先在应用程序目录中搜索,然后再搜索其他地方吗? 有没有可能改变这种行为?
【问题讨论】:
-
如何使用 DependencyWalker 获得该输出?据我所知,
plugins中的库是由 Qt 在运行时加载的。我试图重现您的问题,但在我的应用程序中,我在 Dependency Walker 中找不到对qwindows.dll的依赖项(但该应用程序具有并且需要qwindows.dll)。你有 qt.conf 吗? -
DependancyWalker 具有“分析”模式,它会吐出非常详细的加载日志。
标签: c++ windows qt dll deployment