Проблемы со сборкой Qt из-за отсутствующих библиотек OpenGL

Вопрос или проблема

Я пытаюсь создать исполняемую программу на основе Qt для Linux и связать Qt статически в бинарнике. Согласно документации Qt, для этого мне нужно будет собрать Qt из исходников, начав с команд:

cd /path/to/Qt
./configure -static -prefix /path/to/Qt

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

ERROR: Тесты функциональности OpenGL не удались!
Вам, возможно, нужно изменить пути поиска заголовков и библиотек, отредактировав QMAKE_INCDIR_OPENGL[_ES2],
QMAKE_LIBDIR_OPENGL[_ES2] и QMAKE_LIBS_OPENGL[_ES2] в mkspec для вашей платформы.

Проверьте config.log для подробностей.

Это не первый раз, когда у меня возникли проблемы с OpenGL и Qt… когда я собирал свою программу с динамической линковкой (используя бинарные библиотеки Qt), я столкнулся с подобной проблемой, которую я решил, создав символическую ссылку на libGL.so из /usr/lib.

Вывод от configure сказал найти “mkspec” для моей платформы, поэтому я посмотрел в Qt/5.13.1/Src/qtbase/mkspecs/linux-g++-64 (я явно указал использовать эту платформу с помощью команды -platform). Я покопался и попробовал установить эти переменные окружения на различные комбинации путей, которые казались правдоподобными, но безуспешно.

Также упоминался файл config.log. Когда я смотрю в этот файл, я вижу, что OpenGL упоминается только в этом блоке:

loaded result for library config.qtbase_gui.libraries.opengl
Trying source 0 (type pkgConfig) of library opengl ...
+ /usr/bin/pkg-config --exists --silence-errors gl
pkg-config не нашел пакет.
  => источник не дал результата.
Trying source 1 (type makeSpec) of library opengl ...
Путь включения /usr/include/libdrm недействителен.
запись заголовка 'config.qtbase_gui.libraries.opengl.headers.0' прошла проверку.
GL/gl.h не найден в [/usr/include/libdrm] и глобальных путях.
  => источник не дал результата.
test config.qtbase_gui.libraries.opengl FAILED
loaded result for library config.qtbase_gui.libraries.opengl_es2
Trying source 0 (type pkgConfig) of library opengl_es2 ...
+ /usr/bin/pkg-config --exists --silence-errors glesv2
pkg-config не нашел пакет.
  => источник не дал результата.
Trying source 1 (type makeSpec) of library opengl_es2 ...
Ничего из [libGLESv2.so libGLESv2.a] не найдено в [] и глобальных путях.
  => источник не дал результата.
test config.qtbase_gui.libraries.opengl_es2 FAILED

Действительно, pkg-config --print-errors --exists gl не может ничего найти. Не знаю, откуда берется этот путь /usr/include/libdrm

Спасибо!

Следуя совету @Michael_Hirsch, я смог сгенерировать файл сборки, установив пакеты, перечисленные выше, и затем полностью удалив и заново клонировав репозиторий с github.

(Qt5 — это проект, который я пытался скомпилировать)

Ответ или решение

Ваша проблема с отсутствующими библиотеками OpenGL при сборке Qt на Linux может быть решена различными способами. Давайте подробно рассмотрим шаги, которые вы можете предпринять для устранения этой ошибки и успешной статической сборки вашего Qt-приложения.

1. Установка необходимых библиотек

Первое, что следует сделать — это убедиться, что на вашей системе установлены все необходимые пакеты для работы с OpenGL. Используйте следующие команды для установки частых зависимостей (для систем на базе Debian/Ubuntu):

sudo apt-get update
sudo apt-get install build-essential libgl1-mesa-dev libglu1-mesa-dev libglew-dev

Для систем на базе RPM (например, CentOS/RHEL) используйте:

sudo yum groupinstall "Development Tools"
sudo yum install mesa-libGL-devel mesa-libGLU-devel glew-devel

Проверьте, что у вас установлены соответствующие библиотеки, включая библиотеки для OpenGL и OpenGLES.

2. Путь к библиотекам

Ваши записи в config.log показывают ошибки, связанные с путем к файлам заголовков OpenGL. Убедитесь, что переменные окружения таких как QMAKE_INCDIR_OPENGL и QMAKE_LIBDIR_OPENGL корректно настроены:

  1. Проверка библиотек: Убедитесь, что файлы libGL.so и libGLESv2.so действительно существуют в каталоге /usr/lib или /usr/lib64. Используйте команду locate или find для поиска их:

    locate libGL.so
    locate libGLESv2.so
  2. Добавление путей: Если файлы находятся в нестандартных директориях, добавьте их в LD_LIBRARY_PATH или укажите их ручным образом в configure:

    export LD_LIBRARY_PATH=/your/custom/path:$LD_LIBRARY_PATH

3. Исправление конфигурации mkspec

Как вы уже упомянули, вам нужно отредактировать mkspec для вашей платформы. Откройте файл linux-g++-64/qmake.conf и добавьте или измените параметры:

QMAKE_INCDIR_OPENGL += /usr/include
QMAKE_LIBDIR_OPENGL += /usr/lib
QMAKE_LIBS_OPENGL += -lGL

4. Проверка pkg-config

Так как у вас возникли ошибки с pkg-config, было бы разумно установить сам пакет pkg-config, если он ещё не установлен:

sudo apt-get install pkg-config

Затем попробуйте зарегистрировать OpenGL используя:

pkg-config --cflags --libs gl

Эта команда должна вернуть пути к заголовочным файлам и библиотекам OpenGL.

5. Запуск конфигурации

После всех вышеперечисленных действий перезапустите процесс конфигурации:

cd /path/to/Qt
./configure -static -prefix /path/to/Qt -platform linux-g++-64

6. Проверка конфиг-файла

Если ошибка всё ещё повторяется, обратитесь к config.log. Он предоставит более подробную информацию о том, где именно возникла ошибка. Если в config.log есть упоминания о путях, которые отсутствуют, вам может понадобиться вручную создать символические ссылки на необходимые .so файлы в lib.

Заключение

Следуя указанным шагам, вы должны быть в состоянии успешно собрать Qt с включённой поддержкой OpenGL. Если вопросы все же останутся, старайтесь обращаться к документации Qt и Linux, а также к сообществу разработчиков для поиска возможных решений.

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

Капча загружается...