Мне нужно использовать OpenGL в моем коде. Я использую CMake для поиска opengl в моей системе следующим образом:
find_package(OpenGL REQUIRED)
Он возвращает эту ошибку:
CMake Error at /usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find OpenGL (missing: OPENGL_opengl_LIBRARY OPENGL_glx_LIBRARY
OPENGL_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/share/cmake-3.10/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-3.10/Modules/FindOpenGL.cmake:369 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
CMakeLists.txt:8 (find_package)
-- Configuring incomplete, errors occurred!
See also "/home/kapil/Documents/OpenGLZero/build/CMakeFiles/CMakeOutput.log".
Я установил nvidia-drivers-418 (не безголовые). Он показывает всю информацию opengl здесь:
В драйвере Nvidia есть пакет libnvidia-gl-418
, и мне кажется, что он должен предоставить мне возможности opengl. Вот результат dpkg -l libnvidia-gl-418
:
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==================================-======================-======================-==========================================================================
ii libnvidia-gl-418:amd64 418.56-0ubuntu0~gpu18. amd64 NVIDIA OpenGL/GLX/EGL/GLES GLVND libraries and Vulkan ICD
ii libnvidia-gl-418:i386 418.56-0ubuntu0~gpu18. i386 NVIDIA OpenGL/GLX/EGL/GLES GLVND libraries and Vulkan ICD
и dpkg -L libnvidia-gl-418
:
/usr/lib/x86_64-linux-gnu/libEGL_nvidia.so.418.56
/usr/lib/x86_64-linux-gnu/libGLESv1_CM_nvidia.so.418.56
/usr/lib/x86_64-linux-gnu/libGLESv2_nvidia.so.418.56
/usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.418.56
/usr/lib/x86_64-linux-gnu/libnvidia-cbl.so.418.56
/usr/lib/x86_64-linux-gnu/libnvidia-eglcore.so.418.56
/usr/lib/x86_64-linux-gnu/libnvidia-glcore.so.418.56
/usr/lib/x86_64-linux-gnu/libnvidia-glsi.so.418.56
/usr/lib/x86_64-linux-gnu/libnvidia-glvkspirv.so.418.56
/usr/lib/x86_64-linux-gnu/libnvidia-rtcore.so.418.56
/usr/lib/x86_64-linux-gnu/libnvidia-tls.so.418.56
/usr/lib/x86_64-linux-gnu/libnvoptix.so.418.56
/usr/lib/x86_64-linux-gnu/nvidia-418
/usr/lib/x86_64-linux-gnu/nvidia-418/xorg
/usr/lib/x86_64-linux-gnu/nvidia-418/xorg/libglxserver_nvidia.so.418.56
/usr/share
/usr/share/doc
/usr/share/doc/libnvidia-gl-418
/usr/share/doc/libnvidia-gl-418/changelog.Debian.gz
/usr/share/doc/libnvidia-gl-418/copyright
/usr/share/glvnd
/usr/share/glvnd/egl_vendor.d
/usr/share/glvnd/egl_vendor.d/10_nvidia.json
/usr/share/vulkan
/usr/share/vulkan/icd.d
/usr/share/vulkan/icd.d/nvidia_icd.json
/usr/lib/x86_64-linux-gnu/libEGL_nvidia.so.0
/usr/lib/x86_64-linux-gnu/libGLESv1_CM_nvidia.so.1
/usr/lib/x86_64-linux-gnu/libGLESv2_nvidia.so.2
/usr/lib/x86_64-linux-gnu/libGLX_nvidia.so.0
/usr/lib/x86_64-linux-gnu/libnvoptix.so.1
/usr/lib/x86_64-linux-gnu/nvidia-418/xorg/libglxserver_nvidia.so
В прошлый раз мне пришлось установить mesa-utils
(для glxinfo) и libgl1-mesa-dev
для использования opengl. Я хочу знать, полезны ли драйверы nvidia для opengl, или вместо этого мне нужно было установить безголовые драйверы? (Как) Могу ли я использовать opengl, установленный в nvidia? Спасибо.
Я создал ссылку: lrwxrwxrwx 1 root root 10 Apr 9 12:17 libGL.so -> libGL.so.1
, но include_dir все еще не найден. Ошибка: Could NOT find OpenGL (missing: OPENGL_INCLUDE_DIR)
. Однако ошибка библиотеки была устранена.
Присутствовала одна ссылка libGL.so.1 -> libGL.so.1.0.0
. Может быть, то, как я его установил, не создает ссылок. Я не использовал установщик, а использовал ppa графического драйвера и apt-get для его установки.
Используйте файлы заголовков из libgl1-mesa-dev
для компиляции вашей программы, как вы это делали ранее. Полученная программа по-прежнему будет использовать драйвер nvidia, если он установлен.
Прежде всего: Не связывайтесь ни с какими символическими ссылками или библиотеками, установленными в вашей системе менеджером пакетов или установщиком драйверов NVidia!Если вы это сделали, вам лучше вернуть его в состояние, в котором вы нашли вещи.
Так что отсутствуют заголовки OpenGL, не библиотеки. Они используются (d), чтобы поставляться с установщиком драйверов NVidia, но если вы используете системный менеджер пакетов, они будут разделены на другой пакет.
Технически вы можете просто скопировать заголовки из реестра OpenGL в свой проект. Но обычно люди устанавливают системный пакет по умолчанию, который поставляет заголовки.
В случае Debian и Ubuntu это будет пакет mesa-common-dev
. Неважно, что это пакет Mesa, заголовки одинаковые (функционально).
Насколько мне известно, точная библиотека OpenGL для использования выбирается путем установки на нее символической ссылки. Я полагаю, что в каталоге
/usr/lib/x86_64-linux-gnu/
есть такая символическая ссылка с названием, похожим наlibGL.so
.