Как перенести qt программу на другой компьютер

Обновлено: 02.07.2024

Я разработал простое приложение с Qt 5.0.2 для Windows 7 Ultimate. В качестве компилятора QtCreator использовал MSVC2012_64bit. И я не могу перенести свое приложение на другой компьютер. Это не работает. Приложение Qt требует библиотеки DLL, которую я не могу найти. Исследователь зависимостей считает, что указанные ниже .dll не найдены. Где их найти? Почему эта проблема так широко распространена? Все люди жалуются, что не могут заставить свой .exe , разработанный с помощью Qt, работать на другом компьютере.

РЕДАКТИРОВАТЬ1: Кстати, когда я добавил DCOMP.dll , загруженный из Интернета, не найденных dll стало в 2-3 раза больше, чем сейчас :)

РЕДАКТИРОВАТЬ2: Также обратите внимание, что на другом компьютере (Windows 7 Home Premium), когда я дважды щелкаю по exe-файлу, он показывает, что он загружается, и никакого эффекта, никакой ошибки вообще ничего.

4 ответа

Это список необходимых мне dll, а также я скопировал папку C:\Qt\Qt5.0.2\5.0.2\mingw47_32\plugins\platforms :

enter image description here

Просто это и сработало для меня. Кстати, я использую Windows 7 Ultimate 64x и Qt 5.0.2 для 32-разрядной версии Windows (MinGW 4.7, 650 МБ) для Qt.

РЕДАКТИРОВАТЬ: вам также может потребоваться скопировать .dll QtCreator, а также вам может потребоваться файл с именем qt.conf со следующим содержимым (скопировано из ответа @Renato):

Спасибо за вашу помощь, ребята!

Для меня простое добавление qwindows.dll в каталог /platforms как-то не помогло.
Я наконец заставил все работать, просто скопировав весь каталог plugins в двоичный каталог моего приложения и создав файл qt.conf со следующим содержанием:

Qt в наши дни (по крайней мере, Qt 5.2, если не раньше) поставляется с "windeployqt.exe", который, когда указывает на вашу скомпилированную программу (и, если вы, как я, используете их, как дополнительный аргумент "-" qmldir path / to / QML / files "для программы Qt Quick) должен размещать все необходимые библиотеки DLL в том же каталоге, что и ваша скомпилированная программа в настоящее время. Так что для себя, например, на локальной машине сборки я запустил что-то вроде:

Это с каталогом Qt \ bin в моем $ PATH (или, я полагаю, на языке Windows,% PATH%;)) с использованием Qt 5.5, хотя я сделал то же самое с 5.2 и 5.3.

IIRC, если я использую MSVC в качестве компилятора, мне все равно нужно было скопировать эти DLL (в моем случае, msvc2010, поэтому msvcp100.dll и msvcr100.dll) вручную, но я мог ошибаться.

Просто добавьте файл qt.conf в каталог приложения со следующим содержанием

Затем скопируйте в тот же каталог приложения подкаталог «платформы», который вы найдете в каталоге C: \ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin

Это решает проблему, потому что qtcore.dll скомпилирован с внутренними путями вашей установки qt. (Я не знаю, почему!). Поскольку qt.conf всегда читается qtcore, когда приложение запускает, библиотеки на «платформах» будут включены, и приложение будет работать на любом хосте.

Предупреждение: подкаталог qtcore и платформы должен быть получен из одной установки qt.

Qt — по-настоящему замечательная библиотека, позволяющая перенести программу на другую операционную систему простой перекомпиляцией. И если разработчик не использовал чего-нибудь ОС-специфичного, она таки будет выглядеть и работать почти как родная. После разработки основного функционала, при которой различия минимальны, наступает стадия полировки и доводки — об этом и будет рассказывать настоящий цикл статей.




Сейчас информации по теме в рунете мало, она разобщена, поверхностна, или уже устарела. В англоязычном варианте есть официальная документация по Qt и Stack Overflow, однако мне кажется, что для изучения всё же больше подходит формат статей с примерами из практики. По ходу я постараюсь давать ссылки на старые посты (будут помечены"*") по соответствующим темам, чтобы добавить систематизации существующему материалу.
Итак, есть весьма объемный обзорный пост о возможностях Qt, по большей части он актуален и сегодня. Можно выделить два основных направления: поведение и внешний вид. Как программа должна выглядеть и вести себя — описано в соответствующих H I G, и большую часть работы библиотека берет на себя, вплоть до того, что меняет порядок кнопок в стандартных диалогах. Другую же часть, более тонкие и специфичные моменты — придется реализовывать хотя и средствами Qt, но все равно вручную. Например применение изменений в Windows обычно происходит при нажатии на кнопку, в OS X — мгновенно. С отображением тоже все неплохо — приложения не режут глаз, не выбиваются из общего стиля, однако проблем хватает, особенно в OS X: откровенно страшный стандартный календарь, кривые градиенты заголовков таблиц, устаревший groupBox — вот неполный список кандидатов на полировку. А ведь еще дисплеи высокой четкости, глобальное меню, Dock, уведомления. Ограничения отображения при drag-n-drop в Windows, квест с установкой банальных иконок в Linux. Отдельным пунктом идет подготовка к распространению, которая тоже весьма специфична.

Как правило программы пишутся для того чтобы их впоследствии распространять. Либо в открытом доступе, либо локально (например, внутри компании).

Как сделать, чтобы пользователь мог работать с программой, написанной на Qt, на своём компьютере?

Подготовку программы на Qt к распространению можно условно разделить на два этапа:

Компиляция программы в «релиз»;

Комплектация программы необходимыми библиотеками.

Рассмотрим оба этапа применительно к Qt 5.7 с компилятором MinGW для операционной системы Windows.

Компиляция программы в «релиз»

Существуют два основных варианта компиляции приложения:

Отладочный вариант используется только на этапе разработки и не предназначен для распространения. Кроме того, при комплектации библиотеками для отладочного варианта последние должны иметь суффикс « d » в названии.

Поэтому программу перед распространением необходимо скомпилировать в варианте «Выпуск» («релиз»).

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

Компиляция в релиз

После выбора варианта компиляции и её последующего запуска, программа будет скомпилирована соответствующим образом.

Комплектация библиотеками

После компиляции программы её следует обязательно укомплектовать необходимыми библиотеками.

Дело в том, что в папке со скомпилированной программой находится только исполняемый файл (exe). В таком виде программа будет работоспособна только при запуске из QtCreator, что для обычного пользователя совершенно не приемлемо (да и для самого разработчика не всегда удобно).

Конкретный перечень необходимых библиотек зависит от проекта. Ниже приведён список самых основных из них (которые требуются для запуска любого Qt приложения).

Библиотеки собственно Qt:

Их, а также другие библиотеки Qt можно найти в папке : папка_установки_Qt\Tools\mingw530_32\bin

Служебные библиотеки компилятора:

Их можно найти в папке: папка_установки_Qt\5.7\mingw53_32\bin

Для того чтобы укомплектовать своё приложение необходимыми библиотеками достаточно просто скопировать их в папку с исполняемым файлом.

После этого программа будет готова к распространению и можно приступать к созданию инсталлятора или просто упаковать приложение вместе со всеми библиотеками, например, в zip архив.

Обратите внимание!

Библиотеки для приложения следует копировать именно из папок mingw, а не QtCreator. В последнем случае программа будет укомплектована библиотеками, которые предназначены только для QtCreator и, как следствие, может в итоге оказаться неработоспособной.

введите описание изображения здесь

Я разработал простое приложение с Qt 5.0.2 для Windows 7 Ultimate. В качестве компилятора QtCreator использовал MSVC2012_64bit. И я не могу перенести свое приложение на другой компьютер. Это не работает. Приложение Qt требует DLL, которые я не могу найти. Исследователь зависимостей считает, что .dll s ниже не найдены. Где я могу их найти? Почему эта проблема так широко распространена? Все люди жалуются, что они не могут получить их .exe , который разработан с Qt, работает на другом компьютере.

EDIT1: Кстати, когда я добавил DCOMP.dll скачал из интернета, не найденные dll стали в 2-3 раза больше чем сейчас 🙂

EDIT2: Также обратите внимание, что на другом компьютере (Windows 7 Home Premium), когда я дважды щелкаю по exe-файлу, он показывает, что он загружается и не оказывает никакого влияния, ничего не ошибается вообще.

Решение

Этот список DLL мне нужно, а также я скопировал C:\Qt\Qt5.0.2\5.0.2\mingw47_32\plugins\platforms папка:

введите описание изображения здесь

Только это и у меня сработало. Кстати, я использую Windows 7 Ultimate 64x и Qt 5.0.2 для 32-битного пакета Windows (MinGW 4.7, 650 МБ) для Qt.

РЕДАКТИРОВАТЬ: Вам также может понадобиться .dll QtCreator для копирования, а также вам может понадобиться файл с именем qt.conf со следующим содержанием (скопировано из ответа @Renato):

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

просто добавьте файл qt.conf в каталог вашего приложения со следующим содержанием

затем скопируйте в каталог dir приложения «платформы», который вы найдете в каталоге dir C: \ Qt \ Qt5.1.1 \ Tools \ QtCreator \ bin

Это решается, потому что qtcore.dll компилируется с внутренними путями вашей установки qt. (Я не знаю, вай!). Поскольку qt.conf всегда читается qtcore, когда приложение запускает библиотеки на «платформах», они будут включены, и приложение будет работать на любом хосте.

Предупреждение: подкаталог qtcore и платформы должен быть из одной и той же установки qt.

Извините по английски но решение работает отлично.

Это с каталогом Qt \ bin в моем $ PATH (или, я думаю, на языке Windows,% PATH%;)) с использованием Qt 5.5, хотя я сделал то же самое с 5.2 и 5.3.

IIRC, если я использую MSVC в качестве компилятора, мне все равно нужно было скопировать эти библиотеки DLL (в моем случае, msvc2010, поэтому msvcp100.dll и msvcr100.dll) вручную, но я мог ошибиться.

Создаю небольшое серверное приложение, работающее с базой данных. Установлена Win 8.1 x64, QT 5.8.0 на MinGW x32. Плагин qsqlmysql.dll шёл сразу в комплекте. В проекте как положено подключил sql, и скинул libmySQL.dll из папки установленного MySQL сервера в папку %QTDIR%/mingw53_32/bin. На моём компьютере всё работает.
Собираю release сборку, копирую нужные Qt****.dll, .dll для MinGW, папки platforms и sqldrivers, а также libmySQL.dll в папку с экзешником. Тем не менее, при запуске на другом компьютере с Win 7 x64, qt сообщает что не удаётся загрузить QMYSQL driver, в доступных драйверах он есть.
Видел много обсуждений на эту тему. В основном советуют собирать qsqlmysql.dll вручную, но у меня то он есть, и превосходно работает на машине с qt. Все проблемы при запуске на другом компе. Прошу помочь - куда копать и что делать дальше.

Создаю небольшое серверное приложение, работающее с базой данных. Установлена Win 8.1 x64, QT 5.8.0 на MinGW x32. Плагин qsqlmysql.dll шёл сразу в комплекте. В проекте как положено подключил sql, и скинул libmySQL.dll из папки установленного MySQL сервера в папку %QTDIR%/mingw53_32/bin. На моём компьютере всё работает.
Собираю release сборку, копирую нужные Qt****.dll, .dll для MinGW, папки platforms и sqldrivers, а также libmySQL.dll в папку с экзешником. Тем не менее, при запуске на другом компьютере с Win 7 x64, qt сообщает что не удаётся загрузить QMYSQL driver, в доступных драйверах он есть.
Видел много обсуждений на эту тему. В основном советуют собирать qsqlmysql.dll вручную, но у меня то он есть, и превосходно работает на машине с qt. Все проблемы при запуске на другом компе. Прошу помочь - куда копать и что делать дальше.

Можете ли вы получить доступ к workbench mysql на целевом компьютере

Добрый день.
Честно говоря мне не разу ни удалось использовать драйвер из комплекта, но я всегда сразу видел, что он не работает. Если у вас он работает, то ОК, но я бы его пересобрал под целевую версию MySQL.
По вашей задаче не совсем понятно - какие именно "проблемы при запуске" (нет подключения к БД или программа вовсе не запускается, или дает ошибку (вылет) + интересует расположение БД (в локальной сети или интернет).
Если у вас БД на каком-нибудь хостинге, то наверняка у хостера для клиентского компьютера должно быть прописано разрешение на удаленное подключение к БД.

@Avtansh-Sharma немного не понимаю к чему здесь workbench. На целевом не работает ни подключение к локальной БД, ни к удалённой (обе 100% рабочие), на моём подключается и туда и туда.

Читайте также: