В этой статье мы рассмотрим, как правильно собрать все зависимости qt для вашего приложения, которое было собрано динамически.
Для начала немного теории.
Зачем это нужно?
- Статическая сборка.
Статическая сборка предполагает создание бинарника, в котором будут все необходимые ссылки на него. Другими словами, в нем будет лежать все, что нужно для его работы. Этот подход подходит для небольших консольных приложений, у которых мало зависимостей, иначе размер конечного бинарного файла будет чрезвычайно большим. - Динамичная сборка.
Отличается от статического тем, что в бинарнике будет только исходный код вашего приложения (размер бинарника будет минимальным), но при запуске такого приложения ему потребуются сторонние библиотеки, которые использовались при его написании.
Теперь небольшое описание.
Console-QtDeployer — это простая утилита, похожая на windeployqt и macdeployqt . Но в отличии от аналогов у него гораздо более гибкий интерфейс (флаги запуска) и более высокая скорость, к тому же он поддерживает 2 платформы windows и linux, а значит теперь мы можем строить зависимости для windows на линуксе и наоборот.
Программы из Windows на Linux. Wine для начинающих
Возьмем пример.
Например, я написал простое qt-приложение с использованием qml — MyApp.
MyApp (main.cpp)
#include #include int main (int argc, char * argv []) < QCoreApplication :: setAttribute (Qt :: AA_EnableHighDpiScaling); QGuiApplication app (argc, argv); QQmlApplicationEngine engine; engine.load (QUrl (QStringLiteral («qrc: /main.qml»))); if (engine.rootObjects (). isEmpty ()) return -1; return app.exec (); >
MyApp (main.qml)
import QtQuick 2.9 import QtQuick.Controls 2.2 ApplicationWindow < visible: true width: 640 height: 480 title: qsTr («Scroll») ScrollView < anchors.fill: parent ListView < width: parent.width model: 20 delegate: ItemDelegate < text: «Item» + (index + 1) width: parent.width >> > >
MyApp подключается динамически, то есть для работы ему нужны библиотеки qt.
Если мы попытаемся запустить приложение, то сразу после сборки получим ошибку:
~/build-MyApp-Desktop_Qt_5_11_1_GCC_64bit4-Release $ ./MyApp ./MyApp: /usr/lib/x86_64-linux-gnu/libQt5Qml.so.5: version `Qt_5 ‘not found (required by ./MyApp) ./MyApp: /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5: version `Qt_5 ‘not found (required by ./MyApp) ./MyApp: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5.11 ‘not found (required by ./MyApp) ./MyApp: /usr/lib/x86_64-linux-gnu/libQt5Core.so.5: version `Qt_5 ‘not found (required by ./MyApp)
Из подобных текстов мы видим, что приложение зависит от графических библиотек qt и qml. Поиск и сборка всех ресурсов (библиотек и плагинов) займет много времени.
Для экономии времени и сил воспользуемся утилитой CQtDeployer (ее можно скачать здесь )
или установить в Snap Store
cqtdeployer -bin myApp -qmake /media/D/Qt/5.12.3/gcc_64/bin/qmake -qmlDir ./
После выполнения этой команды вы получите полностью готовое приложение для работы с готовым лаунчером, который настроит все необходимые окружения для работы вашего приложения на всех машинах под управлением Linux.
Python как сделать красивую программу под ПК за 10 минут?
Общее
После запуска Консоли QtDeployer содержимое папки с вашим приложением должно выглядеть так:
drwxr-xr-x 7 andrei andrei 4096 May 24 12:22 ./ drwxrwxr-x 3 andrei andrei 4096 May 24 12:22 ../ drwxr-xr-x 2 andrei andrei 4096 May 24 12:22 bin/ drwxr-xr-x 2 andrei andrei 4096 May 24 12:22 lib/ -rwx—rwx 1 andrei andrei 433 May 24 12:22 myApp.sh* drwxr-xr-x 6 andrei andrei 4096 May 24 12:22 plugins/ drwxr-xr-x 5 andrei andrei 4096 May 24 12:22 qml/ drwxr-xr-x 2 andrei andrei 4096 May 24 12:22 translations/

- myApp.sh — скрипт запуска вашего приложения
- bin — папка с вашим бинарником
- lib — папка со всеми необходимыми зависимостями вашего приложения.
- plugins — qt плагины, необходимые для работы приложения
- qml — qml зависимости.
- translations — стандартные переводы qt.
Таким образом, вы можете подготовить свое приложение к упаковке в deb или snap пакет, после чего можете приступить к его распространению. Обратите внимание, что после запуска cqtdeployer ваше приложение должно быть запущено с помощью скрипта sh, который настроит необходимое окружение для вашего приложения.

Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
Рекомендуемые статьи по этой тематике
- Релиз утилиты развертывания С++/Qt и QML приложений CQtDeployer v1.3.0
- Релиз утилиты развертывания С++/QML приложений CQtDeployer v1.2.3
- SNAP Урок 04. Работаем с деплоем для Qt приложений на основе снап пакета
По статье задано0 вопрос(ов)
Подписка на обсуждение 4
Подписка на раздел 334
Вам это нравится? Поделитесь в социальных сетях!
Источник: evileg.com
Сборка статических приложений на Qt для Windows из Linux
В данном HOWTO мы подробно рассмотрим как собирать статически слинкованные приложения (не требующие библиотек Qt для запуска и работы), написанные на Qt, для Windows прямо из GNU/Linux при помощи компилятора MinGW.
Введение
Для быстрой конфигурации сборки и настройки проектов мы будем использовать свободную IDE Qt Creator, поэтому установим её:
sudo yum -y install qt-creator
Установка компонентов
Для сборки нам потребуется Qt и его заголовочные файлы:
sudo yum -y install qt-devel
sudo yum -y install mingw32
Qt для MinGW32 и его статически слинкованная версия под платформу Win32:
sudo yum -y install mingw32-qt-*
В случае необходимости, установите и WebKit:
sudo yum -y install mingw32-webkitgtk-static
Настройка среды

1. Запустите Qt Creator, откройте настройки среды через меню Tools — Options и переключите его интерфейс на английский язык.

7. Откройте свой проект в Qt Creator, выберите на левой панели пункт Projects. Нажмите кнопку Add Kit и выберите созданный нами MinGW32.

8. Переключитесь на конфигурацию MinGW32, затем в меню Edit build configuration выберите Release. Теперь около Build Steps нажмите кнопку Details и в поле Additional arguments впишите следующее:
CONFIG+=static CONFIG+=staticlib
Сборка проекта
В меню Build IDE Qt Creator выберите пункт Build project. Если вы всё настроили верно, сборка завершится без ошибок и вы получите статически слинкованный exe файл для ОС Microsoft Windows.
4 commentary to post
Алексей :
в каких репах искать mingw32-qt-* ?
Алексей : в каких репах искать mingw32-qt-* ?
В Fedora присутствует в стандартных (fedora и fedora-updates).
что делать с этим?
14:24:33: Настройки не изменились, этап qmake пропускается. 14:24:33: Запускается: «/usr/bin/make» /usr/bin/make -f Makefile.Release make[1]: Entering directory ‘/home/silvana/projects/build-TyagovyRaschet-MinGW32-Release’ i686-w64-mingw32-g++ -g -mthreads -Wl,-subsystem,windows -o release/TyagovyRaschet.exe release/main.o release/dialog.o release/section.o release/moc_dialog.o -L’/usr/i686-w64-mingw32/sys-root/mingw/lib’ -lmingw32 -lqtmain4 -lQtGui4 -lQtCore4 Makefile.Release:82: recipe for target ‘release/TyagovyRaschet.exe’ failed make[1]: Leaving directory ‘/home/silvana/projects/build-TyagovyRaschet-MinGW32-Release’ Makefile:34: recipe for target ‘release’ failed /usr/lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld: cannot find -lqtmain4 /usr/lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld: cannot find -lQtGui4 /usr/lib/gcc/i686-w64-mingw32/5.3.0/../../../../i686-w64-mingw32/bin/ld: cannot find -lQtCore4 collect2: error: ld returned 1 exit status make[1]: *** [release/TyagovyRaschet.exe] Error 1 make: *** [release] Error 2 14:24:33: Процесс «/usr/bin/make» завершился с кодом 2. Ошибка при сборке/установке проекта TyagovyRaschet (комплект: MinGW32) When executing step «Сборка» 14:24:33: Прошло времени: 00:00.
Разделы сайта
- HOWTO (92)
- Новости (8)
- Программирование (7)
- Разное (3)
- Разработка (18)
- Рецензии (3)
Свежее на сайте
- Настраиваем поддержку UEFI Secure Boot для драйверов NVIDIA
- Используем TPM для хранения SSH-ключей
- Работаем с GPG подписями и шифрованием в C#
- Обходим проверку на наличие прав суперпользователя
- Управляем профилями производительности Linux
Источник: www.easycoding.org
Учебник. Создание кроссплатформенных проектов C++ в Visual Studio
Разработка Visual Studio C и C++ теперь подходит не только для Windows. В этом руководстве показано, как использовать Visual Studio для C++ межплатформенной разработки в Windows и Linux. Он основан на CMake, поэтому вам не нужно создавать или генерировать проекты Visual Studio. При открытии папки с файлом CMakeLists.txt Visual Studio настраивает IntelliSense и параметры сборки автоматически.
Вы можете быстро приступить к редактированию, сборке и отладке кода локально в Windows. Затем можно переключить конфигурацию для того, чтобы сделать то же самое в Linux, в Visual Studio.
В этом руководстве вы узнаете, как:
- Клонировать проект CMake с открытым кодом с сайта GitHub.
- Открывать проект в Visual Studio.
- Собирать и отлаживать исполняемый целевой объект на Windows.
- Добавлять подключение к компьютеру Linux.
- Собирать и отлаживать тот же целевой объект в Linux.
Предварительные требования
- Настройка Visual Studio для кроссплатформенной разработки на C++
- Сначала установите Visual Studio и выберите Разработка классических приложений на C++ и Разработка для Linux на C++ . Для минимальной установки требуется всего 3 ГБ свободного места на диске. В зависимости от скорости загрузки установка не должна занять более 10 минут.
sudo apt install -y openssh-server build-essential gdb rsync make zip
wget chmod +x cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh
sudo ./cmake-3.11.18033000-MSVC_2-Linux-x86_64.sh —skip-license —prefix=/usr
Клонирование проекта CMake с открытым кодом с сайта GitHub
В этом руководстве используется пакет SDK Bullet Physics на сайте GitHub.
Он обеспечивает обнаружение столкновений и физическое моделирование для многих приложений. Пакет SDK включает примеры исполняемых программ, которые компилируются и запускаются без дополнительного кода. В этом учебнике не изменяются исходный код или скрипты сборки. Для начала клонируйте репозиторий bullet3 из GitHub на компьютер, где установлена среда Visual Studio.
git clone https://github.com/bulletphysics/bullet3.git
- В главном меню Visual Studio выберите Файл > Открыть > CMake. Перейдите к файлу CMakeLists. txt в корне только что скачанного репозитория bullet3.
Когда вы откроете эту папку, структура папок отобразится в обозревателе решений.
В этом представлении показано, что фактически находится на диске. Это не логическое или отфильтрованное представление. По умолчанию оно не показывает скрытые файлы. - Выберите Показать все файлы, чтобы просмотреть полный список файлов в папке.

Переключение на представление целевых объектов
Когда вы откроете папку, которая использует CMake, Visual Studio автоматически создаст кэш CMake. Эта операция может занять некоторое время в зависимости от размера проекта.
- В окне вывода выберите Показать выходные данные из и выберите CMake для отслеживания состояния процесса создания кэша. По завершении операции отображается надпись: «Извлечение сведений о целевом объекте выполнено».
После завершения этой операции будет настроена технология IntelliSense. Можно выполнить сборку проекта и отладить приложение. В Visual Studio теперь отображается логическое представление решения, основанное на целевых объектах, заданных в файлах CMakeLists. - Нажмите кнопку Решения и папки в обозревателе решений, чтобы переключиться на представление целевых объектов CMake.
Вот как это представление выглядит для пакета SDK Bullet:
Представление целевых объектов обеспечивает более интуитивное отображение содержимого исходной базы. Вы увидите, что некоторые целевые объекты являются библиотеками, а другие — исполняемыми файлами. - Разверните узел в представлении целевых объектов CMake, чтобы просмотреть его файлы исходного кода, где бы эти файлы ни находились на диске.
Добавление явной конфигурации Windows x64-Debug
Visual Studio создает конфигурацию x64-Debug по умолчанию для Windows. Конфигурации указывают Visual Studio, какую платформу она будет использовать для CMake. Конфигурация по умолчанию не представлена на диске. При явном добавлении конфигурации Visual Studio создает файл с именем CMakeSettings.json. Он заполняется параметрами для всех указанных конфигураций.
- Добавьте новую конфигурацию. На панели инструментов откройте раскрывающийся список Конфигурация и выберите Управление конфигурациями.
Откроется редактор параметров CMake. Щелкните зеленый значок плюса в левой части редактора, чтобы добавить новую конфигурацию. Откроется диалоговое окно Добавление конфигурации в CMakeSettings.
В этом диалоговом окне представлены все конфигурации, которые входят в состав Visual Studio, а также все созданные вами настраиваемые конфигурации. Если вы хотите продолжать использовать конфигурацию x64-Debug, добавьте ее в первую очередь. Выберите x64-Debug, а затем нажмите кнопку Выбрать. Visual Studio создает файл CMakeSettings.json с конфигурацией для x64-Debug и сохраняет ее на диске. Вы можете назвать конфигурацию как угодно, изменив параметр имени непосредственно в CMakeSettings.json.
Установка точки останова, сборка и запуск в Windows
На этом шаге нам предстоит отладить пример программы, демонстрирующий библиотеку Bullet Physics.
- В обозревателе решений выберите AppBasicExampleGui и разверните его.
- Откройте файл BasicExample.cpp .
- Задайте точку останова, которая будет выполняться при щелчке кнопки в работающем приложении. Событие щелчка обрабатывается в методе внутри вспомогательного класса. Для быстрого перехода:
- Выберите CommonRigidBodyBase , из которого происходит структура BasicExample , около строки 30.
- Щелкните правой кнопкой мыши и выберите Перейти к определению. Вы находитесь в заголовке CommonRigidBodyBase.h.
- В представлении браузера выше вы увидите, что находитесь в CommonRigidBodyBase . Справа можно выбрать элементы для проверки. Щелкните раскрывающийся список и выберите mouseButtonCallback , чтобы перейти к определению функции в заголовке.



Добавление конфигурации Linux и подключение к удаленному компьютеру
- Добавьте конфигурацию Linux. Щелкните правой кнопкой мыши файл CMakeSettings.json в обозревателе решений и выберите Добавить конфигурацию. Вы увидите то же диалоговое окно «Добавление конфигурации в CMakeSettings», что и раньше. На этот раз выберите Linux-Debug, а затем сохраните файл CMakeSettings.json (CTRL+S).
- Visual Studio 2019 версии 16.6 или более поздней версии: прокрутите вниз в редакторе параметров CMake и выберите Показать дополнительные параметры. В качестве генератора CMake выберите Unix Makefiles, а затем сохраните файл CMakeSettings.json (CTRL+S).
- В раскрывающемся списке конфигураций выберите Linux-Debug.
Если это первое подключение к системе Linux, откроется диалоговое окно Подключение к удаленной системе.
Если вы уже добавили удаленное подключение, это окно можно открыть, перейдя в раздел Сервис > Параметры > кроссплатформенные > диспетчер подключений. - Укажите сведения о подключении к компьютеру Linux и нажмите Подключить. Visual Studio добавляет этот компьютер в CMakeSettings.json как подключение по умолчанию для Linux-Debug. Он также извлекает заголовки из удаленного компьютера, чтобы вы могли получить IntelliSense специально для этого удаленного подключения. Затем Visual Studio отправляет файлы на удаленный компьютер и создает кэш CMake в удаленной системе. Эти действия могут занять некоторое время в зависимости от скорости сети и мощности удаленного компьютера. Вы узнаете, что операция завершена, когда в окне вывода CMake появится сообщение: «Извлечение сведений о целевом объекте выполнено».
Установка точки останова, сборка и запуск в Linux
Так как это классическое приложение, необходимо предоставить некоторые дополнительные сведения о конфигурации для конфигурации отладки.
- В представлении целевых объектов CMake щелкните правой кнопкой мыши AppBasicExampleGui и выберите Параметры отладки и запуска, чтобы открыть файл launch.vs.json, который находится в скрытой вложенной папке .vs. Этот локальный файл для среды разработки. Вы можете переместить его в корень проекта, если хотите проверить его и сохранить для своей команды. В этот файл была добавлена конфигурация для AppBasicExampleGui. Эти параметры по умолчанию работают в большинстве случаев, но не здесь. Поскольку это классическое приложение, необходимо предоставить некоторые дополнительные сведения, чтобы запустить программу и увидеть ее на компьютере Linux.
- Чтобы найти значение переменной среды DISPLAY на компьютере Linux, выполните следующую команду:
echo $DISPLAY
В конфигурации для AppBasicExampleGui существует массив параметров «pipeArgs». В нем есть строка «$». Это команда, которая запускает gdb на удаленном компьютере. Visual Studio необходимо экспортировать соответствующие элементы в этот контекст перед выполнением этой команды. Например, если значение экрана — :1 , измените эту строку следующим образом:
«export DISPLAY=:1;$»,


Чему вы научились
В этом руководстве вы клонировали базу кода непосредственно из GitHub. Вы создали, запустили и отладили его в Windows без изменений. Затем вы использовали эту же самую базу кода, с незначительными изменениями конфигурации, для сборки, запуска и отладки на удаленном компьютере Linux.
Следующие шаги
Дополнительные сведения о настройке и отладке проектов CMake в Visual Studio:
Источник: learn.microsoft.com