Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct
Qt 5.12 static сборка.
-
Добрый день. В очередной раз прошу помощи. Понадобилось запустить проект на другой linux машине. Решил сделать статическую сборку (не ставить же среду разработки на каждой машиине). Динамически проект собирается и работает.
Делал по следующему руководству http://www.cyberforum.ru/qt/thread1079741-page4.html. только исходники от Qt 5.12. С ключем -fontconfig сборка не пошла ( читал форумы так и не понял что за проблема). Собрал исходники Qt в следующей конфигурации
sudo mkdir -p /usr/lib/Qt5_static && ./configure -platform linux-g++ -release -static -opensource -confirm-license -nomake examples -nomake tests -no-openssl -skip qtwebengine -c++std c++14 -nomake tests -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -prefix /usr/local/Qt5_static
Собрал проект , но он не пошел, ругается на отсутствие поддержки xcb. Попробовал пересобрать исходники с ключем -qt-xcb, но вываливается следующая ошибка :
ERROR: Feature 'xcb' was enabled, but the pre-condition 'features.thread && features.xkbcommon && libs.xcb' failed.
Вроде установил все библиотеки для поддержки xcb
sudo apt-get install "^libxcb.*" libx11-xcb-dev libglu1-mesa-dev libxrender-dev
Возможно конечно что то не доставил, но ведь динамически проект собирается ?
Подскажите пожалуйста, у кого есть понимание.
-
не ставить же среду разработки на каждой машиине
Достаточно библиотеки разместить, вся среда не нужна. Но да, статическая сборка чаще более простой способ.
собрал исходники Qt в следующей конфигурации
Какая у вас сложная строка для
configure
. Вот этого будет достаточно:./configure -static -release -no-pch -prefix "/path/to/qt-static" -skip webengine -nomake tools -nomake tests -nomake examples
Я бы ещё рекомендовал использовать теневую сборку, но на сам результат это не должно влиять.
Ну и перед сборкой в системе должны быть Perl и Python, а также поставлены эти пакеты:
apt install build-essential libgl1-mesa-dev
Вот ещё есть здоровенная статья на тему: https://retifrav.github.io/blog/2018/02/17/build-qt-statically/
-
Решил сделать статическую сборку (не ставить же среду разработки на каждой машиине)
Среду разработки и не надо ставить, достаточно собрать приложение с системными библиотеками, либо копировать приложение вместе с используемой версией Qt с помощью linuxdeploy
-
Проблему со статической сборкой решил, приведу подробный алгоритм действий :
Мой проект использует GUI и работает с БД postgresql
Настройка статической сборки на Debian 8, Ubuntu 16.04.LTS, Ubuntu 18.04.2 LTS
Использовалась версия Qt 5.9.5 на Debian 8, Ubuntu 18 и Qt 5.12.1 на Ubuntu 18-
Разворачиваем новую виртуальную машину с нужной ОС, обновляем систему:
$ sudo apt-get update
$ sudo apt-get upgrade -
Для сборки статических библиотек проверяем установку следующих пакетов если не стоят доставляем:
libfontconfig1-dev
libfreetype6-dev
libx11-dev
libxext-dev
libxfixes-dev
libxi-dev
libxrender-dev
libxcb1-dev
libx11-xcb-dev
libxcb-glx0-dev
libxkbcommon-dev$ sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libx11-xcb-dev libxcb-glx0-dev libxkbcommon-dev
-
Ставим пакеты для postgresql:
libpq-dev
postgresql-client
postgresql-contrib$ sudo apt-get install libpq-dev postgresql-client postgresql-contrib
-
Ставим пакеты для opengl-desktop:
libgl1-mesa-dev
$ sudo apt-get install libgl1-mesa-dev
-
На Debian 8 пришлось установить пакет build-essential
$ sudo apt-get install build-essential
-
Копируем в папку в домашней директории ( я копировал в Downloads, кстати на Debian я скопировал в Загрузки и словил проблемму, поэтому используем названия папок на англ. языке)
файл для установки Qt (qt-opensource-linux-x64-5.12.1.run / qt-opensource-linux-x64-5.9.5.run) и архив с исходниками Qt (qt-everywhere-src-5.12.1-tar.xz / qt-everywhere-opensource-src-5.9.5.tar.xz)Устанавливаем Qt (при установке я выбирал Desktop gcc 64 bit, Sources, Tools (по умолчанию qtcreator), остальное мне было не нужно)
$ ./qt-opensource-linux-x64-5.x.x.run
На Debian 8 пришлось править пути к Qt в файле /usr/lib/x86_64-linux-gnu/qt-default/qtchooser/default.conf
прописываем путь к Qt (куда вы установили )
/home/user/Qt5.9.5/5.9.5/gcc_64/bin
/home/user/Qt5.9.5/5.9.5/gcc_64/lib
после этого проверяем в консоле $ qmake --version -
Распаковываем архив с исходниками
$ tar xJf qt-everywhere-src-5.12.1-tar.xz
-
Переходим в папку с исходниками
$ cd qt-everywhere-src-5.12.1-tar.xz/
-
Выполняем конфигурирования исходников Qt5.x.x для static сборки.
$ ./configure -platform linux-g++ -release -static -opensource -confirm-license -nomake examples -nomake tests -no-openssl -skip qtwebengine -c++std c++14 -nomake tests -qt-zlib -qt-libpng -qt-libjpeg -opengl desktop -qt-xcb -fontconfig -sql-psql -prefix ~/MyProject/Qt5_staticЕсли все нормально то в конце не будет ошибок. Но на рабочей машине и на виртуалке с 18 убунтой у меня возникли ошибки
ERROR: Feature 'xcb' was enabled, but the pre-condition 'features.thread && features.xkbcommon && libs.xcb' failed.
ERROR: Feature 'psql' was enabled, but libs.psql' failed. при этом все библиотеки были установлены. Проблемы решились с
помощью явного указания пути к заголовочным файлам и библиотекам при запуске configure.
Для lib.psql: -sql-psql -I /usr/include/postgresql/ -L /usr/lib/postgresql/9.6/lib/
Для lib.xcb : -qt-xcb -I /usr/include/xcb/ -L /usr/lib/x86_64-linux-gnu/ -
Собираем проект
$ make j5 // j5 - количество ядер +1
$ make install -
Запускаем QtCreator идем в инструменты->параметры, настраиваем новый профиль со статическим qmake (указываем путь к собранному нами qmake ~/MyProject/Qt5_static/bin/qmake),
тут же в параметрах добавляем комплект с этим профилем. -
Дедаем новый пустой проект и проверяем.
-