Понедельник, 22.01.2024 17:15

Установка Qt 6.6.0 в РЕДОС Linux из официального зеркала Qt Company Ltd

Установка Qt 6.6.0 в РЕДОС Linux из официального зеркала Qt Company Ltd

После начала СВО на Украине Qt Company Ltd. закрыла доступ с российских адресов к основному зеркалу, с которого осуществлялась загрузка и установка готовых бинарных сборок фреймворка Qt и IDE QtCreator. Кроме того с версии 6 появилось обязательное требование входа в учетную запись Qt для установки программ. Всё это делает процесс установки и обновления неудобным и непрозрачным.

Все ниже написанное производится на только что установленной РЕДОС Linux 7.3.20230815.0, установленной в Hyper-V.

Сегодня мы установим Qt6 в РЕДОС Linux из официального зеркала Qt Company Ltd, доступного с российского ip-адреса. 

Список зеркал мы получили в статье - Находим зеркала для установки Qt6 с Российских ip-адресов.

Установка пакетов

Установим инструменты разработки, которые нам понадобятся для сборки программ на Qt6:

yum groupinstall "Средства разработки"
yum install cmake libX11-devel libglvnd-opengl libglvnd-core-devel libglvnd-devel mesa-libEGL-devel yaml-cpp  libxkbcommon-devel vulkan-devel

 

Процесс установки я расписал на схеме:

1

Создадим папку:

mkdir ~/qt660
cd ~/qt660

Создадим файл

mcedit 1-download.sh

С содержимым:

#! /bin/sh

wget --no-parent -r https://ftp.nluug.nl/languages/qt/online/qtsdkrepository/linux_x64/desktop/qt6_660/

Запустим:

chmod +x 1-download.sh
./1-download.sh

Данная команда создает полную копию папки languages/qt/online/qtsdkrepository/linux_x64/desktop/qt6_660/ с сервера в папке 

~/qt660

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

После окончания загрузки будет создана папка 

ftp.nluug.nl 

со всеми необходимыми файлами.

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

Скопируем архивы в одну папку:

Создаем файл

mcedit 2-copy.sh

С содержимым:

#! /bin/sh

cd ~/qt660
echo Копирование архивов в одну папку...
mkdir -p temp/7z
mkdir -p temp/tmp
find ~/qt660/ftp.nluug.nl  ! -type d -exec bash -c '
    for pathname do
        if [ "$pathname" -nt "~/qt660/temp/tmp/${pathname##*/}" ]
        then
            cp "$pathname" ~/qt660/temp/tmp
        fi
    done' bash {} +
echo Файлы скопированы!
echo Перенос и очистка временных файлов...

mv ~/qt660/temp/tmp/*.7z ~/qt660/temp/7z
rm -drf ~/qt660/temp/tmp
echo Переснос и очистка закончены!

Запустим:

chmod +x 2-copy.sh
./2-copy.sh

После окончания копирования будет создана папка 

~/qt6full/temp/7z 

со всеми архивами *.7z

Теперь, когда все архивы находятся в одном месте их будет намного проще распаковать.

Создаем файл

mcedit 3-extract.sh

С содержимым:

#! /bin/sh

rm -drf ~/qt660/dist
cd ~/qt660/temp/7z
7z x -y -o../ "*.7z"
cd ~/qt660
echo Копируем файлы в папку dist...
mkdir ~/qt660/dist
cp -r ~/qt660/temp/6.6.0/gcc_64/* ~/qt660/dist
rm -drf ~/qt660/temp
echo Копирование завершено!

Запускаем

chmod +x 3-extract.sh
./3-extract.sh

Будет создана папка 

~/qt6full/dist 

с готовой к установке версией Qt 6.6.0

Теперь, когда у нас есть папка со всеми нужными файлами просто скопируем её в /usr/local/qt660

Создаем файл

mcedit 4-install.sh

С содержимым:

#! /bin/sh

rm -drf /usr/local/qt660
mkdir /usr/local/qt660
echo Копируем файлы в /usr/local/qt660 ...
cp -r dist/* /usr/local/qt660
echo Копирование завершено!

Запустим:

su
chmod +x 4-install.sh
./4-install.sh

Все необходимые файлы будут скопированы в папку /usr/local/qt660

Если мы сейчас попробуем получить номер версии Qt6 то у нас ничего не выйдет:

qmake6 -v
bash: qmake6: команда не найдена

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

PATH=/usr/local/qt660/bin:$PATH
export PATH

Но и этого мало, если мы попробуем запустить программу собранную с использование фреймворка Qt6 то получим сообщение об ошибке:

: error while loading shared libraries: libQt6Graphs.so.6: cannot open shared object file: No such file or directory

Нам нужно указать системе где находятся дополнительные библиотеки для запуска программ:

LD_LIBRARY_PATH=/usr/local/qt660/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

Каждый раз запускать эти команды неудобно, тем более что в системе могут работать несколько пользователей и настраивать систему под каждого неэффективно!

В Linux существует папка 

/etc/profile.d

Каждый раз когда любой пользователь запускает новый сеанс происходит запуск всех файлов *.sh из этой папки. Мы создадим файл:

/etc/profile.d/qt660.sh

Для инициализации всех необходимых системных переменных!

Создаем файл

mcedit 5-setupenv.sh

С содержимым:

#! /bin/sh

tee /etc/profile.d/qt660.sh > /dev/null << 'EOT'
PATH=/usr/local/qt660/bin:$PATH
export PATH

LD_LIBRARY_PATH=/usr/local/qt660/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH
EOT

Запустим:

su
chmod +x 5-setupenv.sh
./5-setupenv.sh

Будет создан файл /etc/profile.d/qt660.sh с помощью которого, каждый раз, когда пользователь входит в систему, для него будут устанавливаться нужные переменные.

Перезагрузим ПК

reboot

После перезагрузки проверим:

qmake6 -v
QMake version 3.1
Using Qt version 6.6.0 in /usr/local/qt660/lib

Собираем программу из примеров Qt6

Проверим установленный фреймворк. Загрузим архив с примерами:

mkdir ~/projects
cd ~/projects
wget https://ftp.nluug.nl/languages/qt/online/qtsdkrepository/linux_x64/desktop/qt6_660_src_doc_examples/qt.qt6.660.examples.qtgraphs/6.6.0-0-202310040911qtgraphs-examples-6.6.0.7z

Распакуем:

7z x 6.6.0-0-202310040911qtgraphs-examples-6.6.0.7z

Запустим сборку:

cd Examples/Qt-6.6.0/graphs/axishandling
cmake .
-- The CXX compiler identification is GNU 11.4.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Failed
-- Check if compiler accepts -pthread
-- Check if compiler accepts -pthread - yes
-- Found Threads: TRUE
-- Performing Test HAVE_STDATOMIC
-- Performing Test HAVE_STDATOMIC - Success
-- Found WrapAtomic: TRUE
-- Found OpenGL: /usr/lib64/libOpenGL.so
-- Found WrapOpenGL: TRUE
-- Found XKB: /usr/lib64/libxkbcommon.so (found suitable version "1.0.0", minimum required is "0.5.0")
-- Found WrapVulkanHeaders: /usr/include
-- Configuring done
-- Generating done
-- Build files have been written to: /home/user/projects/Examples/Qt-6.6.0/graphs/axishandling
cmake --build .
[  2%] Running qmlimportscanner for axishandling
[  2%] Built target axishandling_qmlimportscan
[ 20%] Built target axishandling_tooling
[ 23%] Generating .rcc/qmlcache/axishandling_qmlcache_loader.cpp
[ 26%] Automatic MOC and UIC for target axishandling
[ 26%] Built target axishandling_autogen
[ 29%] Running AUTOMOC file extraction for target axishandling
[ 29%] Built target axishandling_automoc_json_extraction
[ 32%] Running moc --collect-json for target axishandling
[ 35%] Automatic QML type registration for target axishandling
[ 38%] Generating .rcc/qmlcache/axishandling_qml/axishandling/AxisDragging_qml.cpp
[ 41%] Generating .rcc/qmlcache/axishandling_qml/axishandling/AxisFormatting_qml.cpp
[ 44%] Generating .rcc/qmlcache/axishandling_qml/axishandling/Data_qml.cpp
[ 47%] Generating .rcc/qmlcache/axishandling_qml/axishandling/main_qml.cpp
[ 50%] Running rcc for resource axishandling_raw_qml_0
[ 52%] Running rcc for resource qmake_AxisHandling
[ 55%] Running rcc for resource qmake_AxisHandling_copy
[ 58%] Building CXX object CMakeFiles/axishandling.dir/axishandling_autogen/mocs_compilation.cpp.o
[ 61%] Building CXX object CMakeFiles/axishandling.dir/main.cpp.o
[ 64%] Building CXX object CMakeFiles/axishandling.dir/axishandling_qmltyperegistrations.cpp.o
[ 67%] Building CXX object CMakeFiles/axishandling.dir/.rcc/qrc_qmake_AxisHandling.cpp.o
[ 70%] Building CXX object CMakeFiles/axishandling.dir/.rcc/qrc_qmake_AxisHandling_copy.cpp.o
[ 73%] Building CXX object CMakeFiles/axishandling.dir/customformatter.cpp.o
[ 76%] Building CXX object CMakeFiles/axishandling.dir/.rcc/qmlcache/axishandling_qmlcache_loader.cpp.o
[ 79%] Building CXX object CMakeFiles/axishandling.dir/.rcc/qmlcache/axishandling_qml/axishandling/main_qml.cpp.o
[ 82%] Building CXX object CMakeFiles/axishandling.dir/.rcc/qmlcache/axishandling_qml/axishandling/Data_qml.cpp.o
[ 85%] Building CXX object CMakeFiles/axishandling.dir/.rcc/qmlcache/axishandling_qml/axishandling/AxisDragging_qml.cpp.o
[ 88%] Building CXX object CMakeFiles/axishandling.dir/.rcc/qmlcache/axishandling_qml/axishandling/AxisFormatting_qml.cpp.o
[ 91%] Building CXX object CMakeFiles/axishandling.dir/.rcc/qrc_axishandling_raw_qml_0.cpp.o
[ 94%] Linking CXX executable axishandling
[100%] Built target axishandling

Запустим:

./axishandling
qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.
Available platform plugins are: offscreen, wayland, eglfs, linuxfb, minimal, wayland-egl, vnc, minimalegl, xcb, vkkhrdisplay.
Aborted (образ памяти сброшен на диск)

Что то пошло не так!

Решение проблем с запуском программ написанных с использованием фреймворка Qt6

Единственная причина подобной ошибки - нехватка библиотек для запуска программы. 

Запустим

ldd ./axishandling | grep not

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

Строка:

qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found.

Говорит нам, что плагин xcb найден, но по какой-то причине не был запущен, давайте проверим и его:

ldd /usr/local/qt660/plugins/platforms/libqxcb.so | grep not
       libxcb-cursor.so.0 => not found
       libxcb-cursor.so.0 => not found

На этот раз у нас есть подозреваемый это библиотека 

libxcb-cursor

Я специально не стал её включать в самом начале статьи, чтобы продемонстрировать как найти недостающие в системе библиотеки. Давайте установим libxcb-cursor:

su
dnf install xcb-util-cursor-devel
Последняя проверка окончания срока действия метаданных: 0:34:05 назад, Пн 22 янв 2024 07:56:38.
Зависимости разрешены.
=============================================================================================================================================================================================================================================
Пакет                                                                  Архитектура                                         Версия                                                   Репозиторий                                       Размер
=============================================================================================================================================================================================================================================
Установка:
xcb-util-cursor-devel                                                  x86_64                                              0.1.3-6.el7                                              base                                               10 k
Установка зависимостей:
xcb-util-cursor                                                        x86_64                                              0.1.3-6.el7                                              base                                               18 k
xcb-util-image-devel                                                   x86_64                                              0.4.0-4.el7                                              base                                               16 k
xcb-util-renderutil-devel                                              x86_64                                              0.3.9-5.el7                                              base                                              9.4 k
Результат транзакции
=============================================================================================================================================================================================================================================
Установка  4 Пакета

Проверим еще раз:

./axishandling

Обратите внимание, при попытке запуска программы с графическим интерфейсом по протоколу SSH вы получите ошибку:

./axishandling
qt.qpa.xcb: could not connect to display

Вы должны запускать программу из графической оболочки РЕДОС Linux!

На этот раз программа без проблем запуститься:

2

Программа корректно собрана и запускается!

Qt 6.6.0 успешно установлен в РЕДОС Linux!

Заключение

Сегодня мы рассмотрели установку Qt 6.6.0 из официального зеркала Qt Company Ltd.:

Установили необходимые для разработки пакеты;

Написали скрипт для загрузки всех необходимых файлов;

Скопировали архивы из папок в одно место;

Распаковали содержимое архивов;

Очистили временные папки и файлы;

Установили фреймворк в /usr/local/qt660;

Приписали пути к исполняемым файлам и библиотекам QT 6.6.0 в переменных при загрузке системы;

Загрузили, собрали и запустили проект из примеров Qt.

Категория Red Linux
Теги Qt6 РЕДОС

Добавить комментарий

Простой текст

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.
Просмотров: 149