Невозможно запустить исполняемый файл qt-creator вне ide, скомпилированного в режиме выпуска - PullRequest
0 голосов
/ 29 марта 2020

После перехода в режим релиза для создания небольшого проекта, который у меня есть, при попытке запустить его изнутри qt-creator ide все идет хорошо. Но когда я go в папку build-<project_name>-Desktop_Qt_5_14_1_MinGW_64_bit- Release и пытаюсь запустить исполняемый файл, сгенерированный в этом каталоге, я получил эту ошибку:

enter image description here

Кто-нибудь знает в чем тут проблема? Если это был какой-то отсутствующий dll, я полагаю, что он укажет, что dll не хватало, верно? Или я ошибаюсь?

update

После запуска windeployqt эта команда нашла зависимости для моего приложения, создала несколько папок, но теперь я получаю эту ошибку, когда попробуйте запустить его:

enter image description here

обновление 2

после запуска утилиты dependency walker, я получил это ошибки на нем:

enter image description here

Я использую этот сборочный комплект для сборки проекта в qt-creator:

enter image description here

1 Ответ

1 голос
/ 30 марта 2020

Вот все, что я знаю о развертывании Qt и проблемах с Windows.

  1. Проверьте, не содержит ли конфигурация выпуска вашего проекта ссылки на какие-либо отладочные версии библиотек .
  2. Создайте свое приложение в режиме выпуска. Используйте Rebuild , если сомневаетесь. См. Окно вывода компиляции в IDE, какие пути он на самом деле использует.
  3. Используйте инструмент windeployqt , чтобы автоматически скопировать все необходимые библиотеки Qt в папку исполняемого файла. Убедитесь, что вы используете windeployqt.exe из правильной папки . Например, в настоящее время у меня есть одна версия фреймворка Qt, но две версии windeployqt: для компиляторов x86 и x64 . Если у вас установлено более одной версии Qt, у вас может быть несколько версий инструмента.

.

 C:\Qt\Qt5.14.1\5.14.1\msvc2017\bin\windeployqt.exe
 C:\Qt\Qt5.14.1\5.14.1\msvc2017_64\bin\windeployqt.exe

Скопируйте библиотеки компилятора в папку выпуска. Убедитесь, что вы копируете библиотеки из того компилятора, который вы использовали для сборки.

Скопируйте все необходимые дополнительные сторонние динамические библиотеки c. Убедитесь, что это не отладочные версии.

Если проблема не устранена, нажмите Ctrl+C, когда сообщение об ошибке активно. Он скопирует весь текст из окна сообщения. Вставьте основную часть сообщения в Google.

Если проблема не устранена, откройте файл .exe в некотором средстве просмотра dll-зависимостей. Вот как я могу это увидеть в Lister . Обратите внимание, что такой инструмент покажет вам не только отсутствующие dll, , но и полный путь для каждой dll, которую фактически использует ваш исполняемый файл. Более мощный инструмент - Dependency Walker .

enter image description here

Убедитесь, что ваше приложение не пытается записать что-либо в защищенную системой папку, такую ​​как c:\Program Files\, без соответствующих привилегий.

Если проблема не устранена максимально упростит ваш проект . Запустите Release для пустого проекта. Затем добавьте модули, функции и библиотеки.

Если все хорошо, протестируйте приложение на полностью чистой виртуальной машине.


Редактировать. Я гуглю ваш текст ошибки и обнаружил:
https://android.developreference.com/article/11361766/Qt5+deployment+%E2%80%9Cprocedure+entry+point+could+not+be+located%E2%80%9D

Проблема заключалась в том, что windeployqt был невозможно найти г cc по какой-то причине. Я добавил его в свой путь из cmd с помощью SET PATH =% PATH%; C: \ Qt \ Tools \ mingw530_32 \ bin. После того, как я снова запустил windeployqt, мне не пришлось копировать libgcc_s_dw2-1.dll и libwinpthread-1.dll вручную, и он использовал правильный Qt5Core.dll, поскольку приложение теперь работает нормально.

Правка2. Лишний предмет удален.

...