0

尝试运行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.
  • 检查 qt.confPathBPathC- 都包含相对路径。
  • 检查了 windeployqt 的源代码 - 它似乎调用qmake -query.
  • 两者都调用-qmake.exe -query它们按预期返回。PathBPathC
  • 更改了两个 qtenv2.bat 中的路径。

尽管如此,windeployqt 仍然坚持搜索C:/PathA——那么它从哪里获得这个价值呢?


PS:我知道我可以尝试卸载所有版本的 Qt,摆脱所有与 Qt 相关的内容并从头开始重新安装。然而,这不是我感兴趣的。我有兴趣允许多个 Qt 版本并排安装并控制使用哪一个(使用 CMake 和 Visual Studio)。


编辑:与这个问题相反,我没有使用 QtCreator,这个问题的范围不是“如何在使用 QtCreator 时安装多个版本的 Qt?”。问题具体是“ windeployqt.exeQt 库的路径在哪里?”

4

2 回答 2

1

引用此页面

windeployqt 将 .exe 文件或包含 .exe 文件的目录作为参数,并扫描可执行文件的依赖项...然后将识别的依赖项复制到可执行文件的目录中。Qt5Core.dll 中硬编码的本地路径被替换为相对路径。

因此,您可能正在 Qt5Core.dll 中寻找这些硬编码路径,您可以使用十六进制编辑器来查找“qt_prfxpat”。

于 2019-09-20T12:06:29.953 回答
1

据我所知,顺序是这样的:

  • 如果在 PATH 的某个目录中找到qmake.exe带有文件的文件,则使用qt.confwindeployqt<path to qmake&qt.conf>/<prefix in qt.conf>/bin
  • 否则,如果qmake.exe在与 相同的目录中找到a,则使用windeployqt.exe硬编码路径qt_binspathinqmake.exe
  • 否则,如果qmake.exe在 PATH 中找到 a,qt_binspath则使用
  • elsewindeployqt失败并显示“无法查询 qmake:CreateProcessW 失败”

感谢 Pedro 对硬编码值的提示以及使用十六进制编辑器的建议。

于 2019-09-20T22:57:05.730 回答