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

Posted

技术标签:

【中文标题】如何将opengl与nvidia驱动程序一起使用?【英文标题】:how to use opengl with nvidia drivers? 【发布时间】:2019-08-30 08:12:02 【问题描述】:

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

【问题讨论】:

AFAIK 通过设置符号链接来选择要使用的确切 OpenGL 库。我想/usr/lib/x86_64-linux-gnu/目录中有这样一个符号链接,名称类似于libGL.so 我创建了链接: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 驱动程序。 【参考方案1】:

首先:不要弄乱软件包管理器或 NVidia 驱动程序安装程序在系统上安装的任何符号链接或库! 如果你这样做了,最好将其返回到说明你找到了东西。

所以缺少的是 OpenGL 标头,不是库。这些使用(d) 附带 NVidia 驱动程序安装程序,但如果您使用系统包管理器,它们将被拆分为不同的包。

从技术上讲,您只需将 OpenGL 注册表中的标头复制到您的项目中即可。但通常人们会安装附带标头的默认系统包。

如果是 Debian 和 Ubuntu,那就是 mesa-common-dev 包。没关系,它是 Mesa 包,标题是相同的(功能上)。

【讨论】:

以上是关于如何将opengl与nvidia驱动程序一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何在nvidia驱动程序下使用opengl?

带有 NVIDIA 驱动程序 (linux) 的 Mesa 标头

Linux - 图形驱动程序和 Mesa 之间的关系

如何查找 NVIDIA OpenGL 驱动程序的错误 ID 名称?

如何将 GLFW 与 openGL 一起使用?

如何使Nvidia成为默认显卡?