Где 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"
Спасибо Педро за подсказку о жестко заданных значениях и предложение использовать шестнадцатеричный редактор.