Невозможно запустить графический интерфейс Qt Creator вне Qt.Ошибка «Не удалось запустить приложение (0xc000007b)» - PullRequest
0 голосов
/ 26 февраля 2019

Я загрузил код C ++ с GitHub, чтобы пометить изображения для обучения детектора объектов с использованием машинного обучения.

В Qt Creator 4.2.1 На основе Qt 5.8.0 (MSVC 2015, 32bit) я смог скомпилировать и запустить код.К сожалению, я не смог запустить .exe вне Qt Creator.

Изначально я получил сообщение об ошибке

"The program can't start because libgcc_s_dw2-1.dll is missing". 

Благодаря QTПрограмма не может запуститься, потому что в libgcc_s_dw2-1.dll отсутствует , что легко исправить, добавив

"QMAKE_LFLAGS += -static" 

в файл .pro.Теперь, когда я запускаю его, я получаю

"The application was unable to start correctly (0xc000007b). Click OK to close the application."  

Я смог воспроизвести ошибку, используя простой проект по умолчанию «Hello World», который появляется при создании приложения Qt Widget.Это заставило меня поверить, что что-то не так с моей установкой.

Основываясь на рекомендациях этой статьи: https://stackoverflow.com/questions/12099117/32-bit-qt-application-on-win-7-x64-wont-run-but-runs-fine-from-qt-creator, я использовал Dependency Walker для выявления возможных причин.Я ожидал увидеть только несколько пунктов, которые я смогу выполнить.Вместо этого я получил список из почти 100 отсутствующих DLL-файлов.Все файлы начинаются с

"API-MS-WIN ###.DLL" or "EXT-MS ###.DLL" 

, где ### представляют некоторые дополнительные текстовые символы, например;

"API-MS-WIN-SHCORE-STREAM-WINRT-L1-1-0.DLL" 

Я прилагаю пример вывода.

Screen Capture of Dependency Walkder

Другим предложением было скопировать

libwinpthread-1.dll, libstdc++-6.dll, libgcc_s_dw2-1.dll.   

Это тоже не сработало.

Мой следующийПереезд состоял в том, чтобы просто получить последнюю версию QT и пожелать лучшего.Я установил Qt Creator 4.8.1 на основе At 5.12.0 (MSVC 2015, 32 бит).На этот раз я даже не смог заставить код работать в IDE.Я получил 1000+ сообщений об ошибках!

Основываясь на рекомендациях с нескольких страниц, я добавил

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets 

в файл .pro, и он все равно не будет компилироваться.

Также я проверил, что приложение строится как 32-битное приложение.Я работаю в 64-битной системе Windows 10.

Если кто-то захочет попробовать его, чтобы посмотреть, сможет ли он создать работающий .exe, вот ссылка: github.com/clavicule/BBTag

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Я понял это!Моя установка Anaconda (популярный дистрибутив Python для науки о данных и машинного обучения) является виновником.

От: @ remy-lebeau

Не удалось правильно запустить приложение (0xc000007b)

Ошибка:

"The application was unable to start correctly (0xc000007b) ..." 

является хорошим индикатором того, что 32-разрядное приложение пыталось загрузить 64-разрядную DLL.Сначала это не имело смысла, так как я много раз проверял, что я использую 32-битную версию Qt.

Оказывается, что установка 64-битной версии Anaconda также содержала много библиотек Qt5, используемых дляпакет PyQt5.Поскольку путь к этой папке предшествовал пути к моей папке c: \ Qt ... \ bin, он использовался в сборке вместо реальной 32-битной версии, установленной с Qt.Это было неочевидно, потому что я не знал о PyQt5, поэтому я понятия не имел, что он поставляется с Anaconda.Простое переупорядочение записей пути с использованием интерфейса системных переменных и перезапуска системы решило проблему.

Серебряная подкладка: теперь я знаю C ++ и проектирую GUI с QT и PyQt5

Спасибо @albertmand и @ jwernerny

0 голосов
/ 26 февраля 2019

Qt предоставляет инструмент для копирования необходимых библиотек в папку вашего исполняемого файла.

Инструменты называются windeployqt.exe и поставляются вместе с вашей установкой Qt.Для меня это находится в C:\Qt\5.9.1\msvc2015_64\bin\windeployqt.exe.Вам нужно будет найти путь установки и, возможно, папку msvc_32, чтобы найти его.

Затем перейдите в папку с исполняемым файлом, получите командную строку или powershell и выполните path\to\windeployqt.exe yourProgram.exe, и он будетавтоматически скопируйте необходимые DLL-файлы в эту папку.После этого вы можете без проблем запускать вашу программу.

Официальную документацию по инструменту можно найти здесь .

Альтернатива 1: При разработке вы можете использовать QtCreator, который автоматически добавляетпути к dll при запуске вашей программы - обязательно включите их, если вы развернете свою программу!

Альтернатива 2: Добавьте путь к необходимым dll в вашу переменную PATH.Это также не рекомендуется, так как каждый, кто получает вашу программу, должен будет сделать то же самое для ее запуска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...