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

    1. Разворачиваем новую виртуальную машину с нужной ОС, обновляем систему:
      $ sudo apt-get update
      $ sudo apt-get upgrade

    2. Для сборки статических библиотек проверяем установку следующих пакетов если не стоят доставляем:

      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

    1. Ставим пакеты для postgresql:

      libpq-dev
      postgresql-client
      postgresql-contrib

      $ sudo apt-get install libpq-dev postgresql-client postgresql-contrib

    2. Ставим пакеты для opengl-desktop:

      libgl1-mesa-dev

      $ sudo apt-get install libgl1-mesa-dev

    3. На Debian 8 пришлось установить пакет build-essential

      $ sudo apt-get install build-essential

    1. Копируем в папку в домашней директории ( я копировал в 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

    2. Распаковываем архив с исходниками

      $ tar xJf qt-everywhere-src-5.12.1-tar.xz

    3. Переходим в папку с исходниками

      $ cd qt-everywhere-src-5.12.1-tar.xz/

    4. Выполняем конфигурирования исходников 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/

    5. Собираем проект

      $ make j5 // j5 - количество ядер +1
      $ make install

    6. Запускаем QtCreator идем в инструменты->параметры, настраиваем новый профиль со статическим qmake (указываем путь к собранному нами qmake ~/MyProject/Qt5_static/bin/qmake),
      тут же в параметрах добавляем комплект с этим профилем.

    7. Дедаем новый пустой проект и проверяем.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.