C++ 如何将opengl与nvidia驱动程序一起使用?

C++ 如何将opengl与nvidia驱动程序一起使用?,c++,linux,opengl,C++,Linux,Opengl,我需要在我的代码中使用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_

我需要在我的代码中使用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-DRIVES-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
/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
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
/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有用,或者我应该安装无头驱动程序?(如何)我可以使用安装在nvidia中的opengl?谢谢。

首要的是:<强>不要使用包管理器或英伟达驱动程序安装程序在系统上安装任何链接或库!strong>如果您这样做了,您最好将其返回到您发现的状态

所以缺少的是OpenGL标题,而不是库。那些使用(d)来与英伟达驱动程序安装程序,但如果你使用你的系统包管理器,他们将被分成一个不同的包。 从技术上讲,您可以将OpenGL注册表中的标题复制到您的项目中。但是通常人们会安装默认的系统包来发送标题


对于Debian和Ubuntu来说,这就是mesa公共开发包。不要介意它是Mesa软件包,标题是相同的(功能上)。

a通过设置一个符号链接选择要使用的确切OpenGL库。我想在
/usr/lib/x86_64-linux-gnu/
目录中有这样一个符号链接,名称类似于
libGL.so
。我创建了这个链接:
lrwxrwx 1 root-root-10 Apr 9 12:17 libGL.so->libGL.so.1
,但仍然找不到include_dir。错误:
找不到OpenGL(缺少:OpenGL\u INCLUDE\u DIR)
。库错误已被删除。存在一个链接
libGL.so.1->libGL.so.1.0.0
。也许我安装它的方式不会创建链接。我没有使用安装程序,而是使用图形驱动程序ppa和apt来安装它。使用
libgl1-mesa-dev
中的头文件像以前一样编译程序。如果安装了英伟达驱动程序,则仍然使用NVIDIA驱动程序。