Мой 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
Скорее всего, на этих компьютерах нет необходимой библиотеки Qt, которую использует ваша программа. Смотрите учебник здесь: http://doc.qt.io/qt-5/windows-deployment.html
Еще одна простая проверка — установить Qt на другой компьютер, переместить ваш .exe и посмотреть, работает ли он. Если это произойдет, вы, конечно, не правильно развернули свое приложение.
Отредактировано, чтобы добавить эту полезную ссылку, так как это, кажется, та же самая проблема, которую люди видят:
https://bugreports.qt.io/browse/QTBUG-28766
Если у вас установлен Cygwin, вы можете запустить ldd <your_app.exe>
и посмотрите список библиотек, которые требуются вашему приложению. После этого скопируйте ваш exe-файл в другую папку и библиотеки, которые ему требуются.
Это должно быть нормально для лицензии LGPL, но я НЕ АДВОКАТ, поэтому, пожалуйста, проконсультируйтесь с некоторыми умными людьми, которые знакомы с юридическими вопросами.
Вы развертываете скомпилированное приложение 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 соответствовала версии компилятора.
Это ошибка в 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
Это ошибка в 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"
выше.