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

Обновлено: 30.06.2024

Я просто хочу дать исполняемый файл и, возможно, позволить другому пользователю (также работающему с Ubuntu) загрузить библиотеку qt5 (не для разработчиков), чтобы запустить приложение.

Я не заинтересован в компиляции статической версии qt только для того, чтобы сделать этот исполняемый файл самодостаточным.

проверка с ldd Я продолжал получать конкретные библиотеки, которые кажутся необходимыми

говорит, что у меня уже установлены последние версии.

Тем не менее приложение не запускается. что случилось? какие библиотеки времени выполнения я должен получить, чтобы исполняемый файл нашел все символы?

2 ответа

Я считаю, что есть несколько методов, которые можно использовать. Я перечислил один метод ниже, и это рекомендуемый метод в документации по развертыванию, которую я дал в комментарии.

Я использую стандартный новый проект приложения Qt Widgets под названием HelloWorld для этого примера, и он был скомпилирован в режиме выпуска, а полученный файл называется "HelloWorld". В этом примере также предполагается, что вы используете x64.

Предполагая, что мы начинаем с корневой папки с именем MyApp, скопируйте в нее исполняемый файл "HelloWorld". Затем в эту папку необходимо скопировать следующие библиотеки из QtInstallationFolder/gcc_64/lib:

  • libicudata
  • libicui18n
  • libicuuc
  • libQt5Core
  • libQt5DBus
  • libQt5Gui
  • libQt5Widgets
  • libQt5XcbQpa

Также скопируйте следующую библиотеку из QtInstallationFolder/gcc_64/plugins/platform в MyApp/platform:

Скопируйте и вставьте следующее в текстовый редактор и сохраните его в папке MyApp как HelloWorld.sh:

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

Выше представлены минимальные библиотеки, необходимые для приложения с графическим интерфейсом. Если вы используете этот метод для своего приложения и в нем используются какие-либо дополнительные библиотеки, кроме перечисленных выше, вам также необходимо скопировать их в корневую папку MyApp. Также, когда вы создаете файл.sh, используйте имя вашего приложения.



  1. Подготовка проекта Qt к развёртыванию
  2. Компоновка дистрибутива программы
  3. Подписание кода и создание установщика

1. Подготовка проекта Qt к развёртыванию

Для того, чтобы было проще следовать инструкциям, создадим простой проект Qt Widgets. Все последующие операции будут относиться к этому проекту. Ниже приведено содержимое исходных файлов приложения:

Программы выглядят особенно качественно и профессионально, если они несут с собой метаданные о разработчике, версии программного продукта, авторских правах, языке и многом другом. Для примера, обратимся к свойствам файла Photoshop.exe всем известной системы Adobe Photoshop. На рисунке ниже показано окно свойств данного файла:


Добавить подобную информацию можно с помощью файла ресурсов. Файл ресурсов имеет расширение .rc и несёт в себе текстовый код, описывающий используемые в приложении ресурсы. Подобные скрипты используются в проектах Visual Studio, основанных на WinAPI, и содержат различные дескрипторы иконок, строк, идентификаторов и прочего. В проектах Qt всё это имеет мало смысла, однако включение общей информации о программе всё же необходимо. Ниже приведены исходный код файла ресурсов и содержимое файла проекта, который также потребуется изменить:

В данном примере важно не забыть добавить файлы resources.rc и icon.ico в папку с исходными файлами проекта. На рисунке ниже показано окно свойств программы после сборки:


Иногда бывает необходимо, чтобы программа запускалась с правами администратора. В рамках Qt это можно реализовать путём использования несложных инструкций в файле проекта. Ниже приведён код, позволяющий программе запрашивать права администратора при запуске:

Следует отметить, что все указанные выше инструкции будут гарантированно работать только при использовании комплекта сборки Visual Studio. Подробную информацию о файлах ресурсов можно найти на портале MSDN в разделе «About Resource Files».

2. Компоновка дистрибутива программы

Создание дистрибутива приложения с учётом всех его файлов, которые должны устанавливаться на компьютерах пользователей, вероятно, является самым сложным этапом развёртывания. Требуется тщательно проанализировать исполняемый файл программы на наличие зависимостей, позаботиться о файлах переводов, не забыть про ресурсы приложения. Решить часть этих проблем поможет утилита windeployqt.exe, которая поставляется вместе с комплектом сборки. Данный инструмент работает в командной строке и поддерживает некоторые параметры конфигурации. На рисунке ниже показано окно командной строки с запущенной утилитой:


Последним параметром обязательно должен быть указан путь к двоичным файлам собранного приложения или имена этих файлов. В таблице ниже перечислены параметры утилиты, которые можно использовать при работе с ней:

Параметр Описание
-?, -h, --help Вывод справки
-v, --version Вывод информации о версии
--dir <каталог> Использовать указанный каталог вместо каталога файлов
--libdir <путь> Каталог, в который будут скопированы библиотеки
--debug Использовать отладочные версии файлов
--release Использовать файлы для выпуска
--release-with-debug-info Использовать файлы для выпуска с отладочной информацией
--force Заменить уже существующие файлы
--dry-run Провести работу с целью проверки
--no-plugins Пропустить копирование плагинов
--no-libraries Пропустить копирование библиотек
--qmldir <каталог> Сканировать импорт QML, начиная с указанного каталога
--no-quick-import Пропустить Qt Quick
--no-translations Пропустить копирование файлов перевода
--no-system-d3d-compiler Пропустить копирование компилятора Direct3D
--compiler-runtime Копировать зависимости компилятора
--no-compiler-runtime Пропустить зависимости компилятора
--webkit2 Копировать файлы WebKit2
--no-webkit2 Пропустить WebKit2
--json Печатать вывод в формате JSON
--angle Копировать файлы ANGLE
--no-angle Пропустить ANGLE
--list <режим> Печатать только имена копируемых файлов. Режимы: source, target, relative, mapping
--verbose <уровень> Уровень отладки
-<имя библиотеки> Добавить указанную библиотеку
--no-<имя библиотеки> Не добавлять указанную библиотеку

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


Следует отметить, что перед использованием windeployqt.exe необходимо добавить путь к этому файлу в переменную среды PATH, в противном случае данный инструмент работать не будет.

3. Подписание кода и создание установщика




После проделанной работы пришло время задуматься над выбором системы создания установщика для подготовленного приложения. Существуют как платные, так и бесплатные продукты для выполнения данной задачи. В таблице ниже перечислены некоторые инструменты для создания программ установки:

Платные Бесплатные
InstallShield Qt Installer Framework
Setup Factory NSIS
SetupBuilder Inno Setup
Smart Install Maker WiX

Сложно дать какие-либо рекомендации по поводу выбора той или иной системы. Разработчики ПО с открытым исходным кодом, вероятно, выберут бесплатные инструменты, в то же время платные продукты часто используются коммерческими компаниями.

Статическая сборка проекта Qt под Windows.

Отвязка проекта, сделанного в Qt, от .dll зависимости.

При создании проекта релиза, программа не будет запускаться на другом компьютере без дополнительных библиотек. Это не очень удобно, потому как при потере даже одной, ваш знакомый не увидит ваше творчество. К тому же, они придают программе дополнительный размер. И это тоже минус.

Смотрим данное видео.

Пошаговая настройка статической сборки Qt для Windows:

2. Устанавливаем Qt. При установке нажимаем кнопку "Выбрать все"

3. Переходим в папку C:\Qt\ Qt5.5.0 \ 5.5 \Src\qtbase\mkspecs\win32-g++\ ( Подчеркнутое - Изменить под свою версию)

4. Редактируем qmake.conf

5. Переходим в папку Qt\ Qt5.5.0 \ 5.5 \Src\qtbase\ ( Подчеркнутое - Изменить под свою версию)

6. Прямо в папке qtbase создаем батник Install.bat с кодом, который написан внизу или копируем уже готовый.

Код батника (Install.bat):

Внимание! на строчку

set PATH=c:\Qt\Qt5.5.0\5.5\mingw492_32\bin;c:\Qt\Qt5.5.0\Tools\mingw492_32\bin;%PATH% Измените Qt5.5.0\5.5 на свою версию.

8. Запускаем батник, соглашаемся с лицензией, нажимаем "y" и ожидаем окончании работы.

По окончании выполнения батника, делаем следующее:

9. Запускаем Qt Creator.

10. Переходим "Инструменты" -> "Параметры" -> "Сборка и запуск" -> "Qt Versions" и нажимаем "Добавить"

11. Добавляем путь C:\Qt\ Qt5.5.0\5.5 \Src\qtbase\bin\qmake.exe ( Подчеркнутое - Изменить под свою версию)

12. Для большей удобности в "Название профиля" дописываем Static. Жмем кнопку "Применить".

13. Переходим в "Комплекты" и нажимаем "Добавить"

14. Меняем "Название" на Static.

15. В "Профиль Qt:" меняем на новый профиль "Qt 5.5.0 (Src) Static". Жмем кнопку "ОК" или "Применить".

Все готово. Теперь проверяем на простой программе и приступаем к программированию.

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

Я разработал простое приложение с 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) вручную, но я мог ошибиться.

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