Где windeployqt.exe хранит каталог Qt? - PullRequest
0 голосов
/ 20 сентября 2019

При попытке запустить windeployqt.exe как он узнает, где искать библиотеки Qt?

Я использую Windows, Qt 5.3, msvc2013_opengl.


Iиметь следующую настройку:

  • 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 ]

1 голос
/ 21 сентября 2019

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

  • Если 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 завершается неудачно с «Unable to query qmake: CreateProcessW fail»

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

1 голос
/ 20 сентября 2019

Цитирование эта страница :

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

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

...