Невозможно запустить исполняемый файл на другом компьютере. & quot; Приложение запросило среду выполнения, чтобы завершить ее необычным способом & quot; ошибка

Мой exe полностью работает на компьютере, на котором я его запрограммировал. Он хорошо отлаживает, хорошо выпускает, и я могу переместить exe-файл из папки ‘release’ в новый файл, найти необходимые DLL-файлы из C: \ pathtoqt \ ming47_32 \ bin, и он все еще работает нормально. Однако, когда я пытаюсь запустить эту программу на другом компьютере с включенными файлами .dll, я не могу этого сделать, и я получаю «Приложение запросило среду выполнения, чтобы завершить его необычным способом».

Я проверил это на 2 компьютерах Windows 7 и 1 Windows XP. Я использовал средство для обхода зависимостей и скачал несколько DLL-файлов, но они все еще не работали. Мне удалось получить его для всех DLL, чтобы иметь статус «найден» или «красный».

Настройки сборки: http://puu.sh/3qTV3.png

Я использую Qt5.0.2, mingGW 4.7 32bit.

Я тоже наткнулся на это ..http://puu.sh/3qU6j.png

9

Решение

Скорее всего, на этих компьютерах нет необходимой библиотеки Qt, которую использует ваша программа. Смотрите учебник здесь: http://doc.qt.io/qt-5/windows-deployment.html

Еще одна простая проверка — установить Qt на другой компьютер, переместить ваш .exe и посмотреть, работает ли он. Если это произойдет, вы, конечно, не правильно развернули свое приложение.

Отредактировано, чтобы добавить эту полезную ссылку, так как это, кажется, та же самая проблема, которую люди видят:
https://bugreports.qt.io/browse/QTBUG-28766

10

Другие решения

Если у вас установлен Cygwin, вы можете запустить ldd <your_app.exe> и посмотрите список библиотек, которые требуются вашему приложению. После этого скопируйте ваш exe-файл в другую папку и библиотеки, которые ему требуются.

Это должно быть нормально для лицензии LGPL, но я НЕ АДВОКАТ, поэтому, пожалуйста, проконсультируйтесь с некоторыми умными людьми, которые знакомы с юридическими вопросами.

5

Вы развертываете скомпилированное приложение mingw, для этого необходимо предоставить следующие DLL-файлы, в дополнение к библиотекам Qt, используемым в вашем приложении:

icudt51.dll
icuin51.dll
icuuc51.dll
libstdc++-6.dll (eventually)
platforms/qminimal.dll
platforms/qwindows.dll
libgcc_s_dw2-1.dll (eventually)

Их можно найти в вашем каталоге mingw, который находится в вашей установке SDK.

Также важно, чтобы поставляемая DLL соответствовала версии компилятора.

5

Это ошибка в Qt.

Это из-за отсутствующей библиотеки DLL, но это подключаемая библиотека DLL, поэтому она не отображается в зависимости от.exe, и Qt не ищет ее там, где должна.

Короче говоря, если вы скопируете qwindows.dll (или qwindowsd.dll для отладочных сборок) на свой компьютер развертывания и поместите в ТОТ ЖЕ АБСОЛЮТНЫЙ ПУТЬ, как он появился, то есть c: \ Qt \ 5.1.0 ….. . \ mingw48_32 \ plugins \ platform \ qwindows.dll, тогда ваше приложение должно работать. Наличие пустого файла qt.conf в той же директории никак не повлияло на мою машину для разработки, но остановило работу приложения на моей машине для развертывания.

Смотрите этот комментарий / сообщение об ошибке для получения дополнительной информации: https://bugreports.qt.io/browse/QTBUG-28766?focusedCommentId=216317&страница = com.atlassian.jira.plugin.system.issuetabpanels: комментарий-tabpanel # комментарий-216317

3

Это ошибка в Windows:

https://bugreports.qt-project.org/browse/QTBUG-28766

В частности, Qt ищет только qwindows.dll (которая является требуется несмотря на то, что depends.exe говорит — он динамически загружается) по жестко запрограммированному абсолютному пути, по которому он установлен на вашей машине разработки, т.е. c:\Qt\.....\plugins\platforms, Существует файл с именем qt.conf, который вы должны использовать для изменения путей поиска, но он не работает.

К счастью, Joost Bloemen предложил обходной путь в отчете об ошибке:

...

#include <windows.h>
#include <QFileInfo>

int main(int argc, char* argv[])
{
// Bug workaround. See https://bugreports.qt-project.org/browse/QTBUG-28766
wchar_t dirpath[MAX_PATH];
GetModuleFileName(0, dirpath, MAX_PATH);
QFileInfo dir(QString::fromWCharArray(dirpath));
QApplication::addLibraryPath(dir.absolutePath());

QApplication a(argc, argv);

...

А потом поставить qwindows.dll (тебе не нужно qminimal.dll) в подкаталоге вашего EXE называется platforms, (Вы можете положить его в .\plugins\platforms вместо этого, если вам нравится, то вам просто нужно изменить dir.absolutePath() в dir.absolutePath() + "/plugins" выше.

0
По вопросам рекламы [email protected]