Где windeployqt.exe хранит каталог Qt?

При попытке бежать 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 - конечно, потому что этого файла больше не существует....

Я попытался:

  • переопределение переменных окружения локально в оболочке.
  • Удалены все вхождения PathA из переменных среды и перезагрузился.
  • Поиск в реестре для PathA.
  • Проверил qt.conf в обоих PathB а также PathC - оба содержат относительные пути.
  • Проверил исходники windeployqt - вроде звонит qmake -query.
  • Вызывается как qmake.exe -query - они вернулись PathB а также PathC как и ожидалось.
  • Поменял пути как в qtenv2.bat.

Тем не менее, windeployqt настаивает на поиске C:/PathA - так откуда у него такая ценность?


PS: Я знаю, что могу попытаться удалить все версии Qt, избавиться от всего, что связано с Qt, и переустановить его с нуля. Однако это не то, что меня интересует. Я заинтересован в том, чтобы разрешить установку нескольких версий Qt рядом друг с другом и контролировать, какую из них использовать (с помощью CMake и Visual Studio).


Изменить: в отличие от этого вопроса, я не использую QtCreator, и объем этого вопроса не "Как установить несколько версий Qt при использовании QtCreator?". Вопрос конкретно в том, "Где находитсяwindeployqt.exe получить путь к библиотекам Qt?"

2 ответа

Цитируя эту страницу:

Windeployqt принимает файл.exe или каталог, содержащий файл.exe в качестве аргумента, и сканирует исполняемый файл на предмет зависимостей... Затем идентифицированные зависимости копируются в каталог исполняемого файла. Кроме того, жестко заданные локальные пути в Qt5Core.dll заменены относительными.

Так что, вероятно, вы ищете эти жестко запрограммированные пути в Qt5Core.dll, вы можете использовать шестнадцатеричный редактор для поиска "qt_prfxpat".

Насколько я могу судить, порядок таков:

  • Если qmake.exe с qt.conf файл находится в одном из каталогов в PATH, windeployqt использует <path to qmake&qt.conf>/<prefix in qt.conf>/bin
  • иначе, если qmake.exe находится в том же каталоге, что и windeployqt.exe, жестко запрограммированный путь qt_binspath в qmake.exe используется
  • иначе, если qmake.exe находится в PATH, qt_binspath там используется
  • еще windeployqt сбой с "Невозможно запросить qmake: сбой CreateProcessW"

Спасибо Педро за подсказку о жестко заданных значениях и предложение использовать шестнадцатеричный редактор.

Другие вопросы по тегам