windeployqt.exe 将 Qt 目录存放在哪里?
Posted
技术标签:
【中文标题】windeployqt.exe 将 Qt 目录存放在哪里?【英文标题】:Where does windeployqt.exe store the Qt directory? 【发布时间】:2019-09-19 22:52:17 【问题描述】:当尝试运行 windeployqt.exe
时,它如何知道在哪里寻找 Qt 库?
我使用的是 Windows、Qt 5.3、msvc2013_opengl。
我有以下设置:
Qt 首先被提取到C:/PathA/Qt/5.3
。它在那里工作得很好。
我把Qt复制到C:/PathB/Qt/5.3
然后我将文件夹 C:/PathA/
重命名为 C:/PathC/
以“隐藏”旧位置。
当运行C:/PathB/Qt/5.3/.../windeployqt.exe
时,它会抱怨它无法读取文件C:/PathA/.../QtPrintSupport.dll
- 当然,因为该文件不再存在......
我试过了:
在 shell 中本地覆盖环境变量。 从环境变量中删除所有出现的PathA
并重新启动。
在注册表中搜索PathA
。
检查了PathB
和PathC
中的qt.conf - 两者都包含相对路径。
查了windeployqt的源码-好像叫qmake -query
。
同时调用 qmake.exe -query
- 它们按预期返回 PathB
和 PathC
。
更改了两个 qtenv2.bat 中的路径。
不过,windeployqt 仍然坚持搜索 C:/PathA
- 那么它从哪里获得该值?
PS:我知道我可以尝试卸载所有版本的 Qt,摆脱所有与 Qt 相关的内容并从头开始重新安装。然而,这不是我感兴趣的。我有兴趣允许多个版本的 Qt 彼此相邻安装并控制使用哪一个(使用 CMake 和 Visual Studio)。
编辑:
与this question 相比,我没有使用QtCreator,这个问题的范围不是“如何在使用QtCreator 时安装多个Qt 版本?”。问题具体是“windeployqt.exe
在哪里获得 Qt 库的路径?”
【问题讨论】:
这是一个 XY 问题。不要试图强迫工具以不同于其设计方式的方式工作。您已经可以并排安装多个版本的 Qt,这一切都记录在这里:doc.qt.io/qtcreator/creator-project-qmake.html Installing multiple versions of Qt library的可能重复 我既不使用 QtCreator 也不使用 qmake。我使用 CMake、Visual Studio 和 windeployqt。当调用 windeployqt 时,它在某处存储了不存在的路径...... 【参考方案1】:引用this page:
windeployqt 将 .exe 文件或包含 .exe 文件的目录作为参数,并扫描可执行文件的依赖项...然后将识别的依赖项复制到可执行文件的目录中。 Qt5Core.dll 中硬编码的本地路径被替换为相对路径。
因此,您可能正在 Qt5Core.dll 中寻找这些硬编码路径,您可以使用十六进制编辑器来查找“qt_prfxpat”。
【讨论】:
我找到了硬编码的路径并对其进行了编辑,但 windeployqt 之后仍然使用相同的路径。看起来这个文档只说,windeployqt 将复制 Qt5Core 并在那里编辑存储的路径。但是你的回答让我走上了正轨……【参考方案2】:据我所知,顺序是这样的:
如果在 PATH 的某个目录中找到带有qt.conf
文件的 qmake.exe
,windeployqt
使用 <path to qmake&qt.conf>/<prefix in qt.conf>/bin
否则,如果在与windeployqt.exe
相同的目录中找到qmake.exe
,则使用qmake.exe
中的硬编码路径qt_binspath
否则,如果在 PATH 中找到 qmake.exe
,则使用那里的 qt_binspath
else windeployqt
失败并显示“无法查询 qmake:CreateProcessW 失败”
感谢 Pedro 对硬编码值的提示以及使用十六进制编辑器的建议。
【讨论】:
以上是关于windeployqt.exe 将 Qt 目录存放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章