Вопрос или проблема
Я пытаюсь создать исполняемую программу на основе 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
корректно настроены:
-
Проверка библиотек: Убедитесь, что файлы
libGL.so
иlibGLESv2.so
действительно существуют в каталоге/usr/lib
или/usr/lib64
. Используйте командуlocate
илиfind
для поиска их:locate libGL.so locate libGLESv2.so
-
Добавление путей: Если файлы находятся в нестандартных директориях, добавьте их в
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, а также к сообществу разработчиков для поиска возможных решений.