为什么我的 32 位 OpenGL 库指向 mesa 而不是 nvidia,我该如何修复它?

为什么我的 32 位 OpenGL 库指向 mesa 而不是 nvidia,我该如何修复它?

我已经在我的 Ubuntu 13 系统上安装了 Nvidia 的驱动程序,但是根据这个命令(ldconfig -p | grep GL):

$ ldconfig -p | grep GL
    libQtOpenGL.so.4 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libQtOpenGL.so.4
    libGLU.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGLU.so.1
    libGLEWmx.so.1.8 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGLEWmx.so.1.8
    libGLEW.so.1.8 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libGLEW.so.1.8
    libGLESv2.so.2 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/mesa-egl/libGLESv2.so.2
    libGL.so.1 (libc6,x86-64) => /usr/lib/libGL.so.1
    libGL.so.1 (libc6) => /usr/lib/i386-linux-gnu/mesa/libGL.so.1
    libGL.so (libc6,x86-64) => /usr/lib/libGL.so
    libEGL.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so.1

32 位版本的 OpenGL 指向 mesa 的库而不是 nvidia。这导致我的 Steam 游戏拒绝启动并出现错误:

找不到所需的 OpenGL 入口点“glGetError”!您的视频卡不受支持,或者您的 OpenGL 驱动程序需要更新。

为什么会这样?当 nvidia 安装程序询问我是否要安装“32 位兼容库”(或类似的东西)时,我选择了“是”。我该如何解决这个问题?


编辑:

我刚刚重新安装了相同的 Nvidia 驱动程序,这显然完全删除了 32 位 OpenGL 驱动程序:

$ ldconfig -p | grep libGL.so
    libGL.so.1 (libc6,x86-64) => /usr/lib/libGL.so.1
    libGL.so (libc6,x86-64) => /usr/lib/libGL.so

现在 Steam 无法启动:

您缺少以下 32 位库,Steam 可能无法运行:libGL.so.1

我再次选择是的当安装程序询问我是否要安装 32 位库时。为什么它们没有安装!?

答案1

选项1:尝试sudo ldconfig在终端中运行。重启并尝试。

选项 2:如果这不起作用,您将必须手动将 NVidia libs 目录 (/usr/lib32) 添加到 ldconfig 配置文件 (/etc/ld.so.conf.d/libc.conf),然后重新运行 ldconfig(当然是以 root 身份运行)

编辑:在更改 libc.conf 之前,我会复制一份。

答案2

当我重新安装 Nvidia 驱动程序时,所有 mesa OpenGL 驱动程序都从库缓存中删除。我的库缓存如下所示:

$ ldconfig -p | grep libGL.so
    libGL.so.1 (libc6,x86-64) => /usr/lib/libGL.so.1
    libGL.so (libc6,x86-64) => /usr/lib/libGL.so

没有 32 位驱动程序!幸运的是,经过快速搜索,我在 下找到了 Nvidia 的 32 位驱动程序/usr/lib32。我将该路径添加到 下的一个文件/etc/ld.so.conf.d/(任何文件都可以,您甚至可以创建一个新文件)并运行sudo ldconfig。我的缓存现在如下所示:

$ ldconfig -p | grep libGL.so
    libGL.so.1 (libc6,x86-64) => /usr/lib/libGL.so.1
    libGL.so.1 (libc6) => /usr/lib32/libGL.so.1
    libGL.so (libc6,x86-64) => /usr/lib/libGL.so
    libGL.so (libc6) => /usr/lib32/libGL.so

Steam 运行完美!

答案3

Codemonkey 正确。您所要做的就是添加 32 位 nvidia 的驱动程序并删除 mesa 驱动程序。

cd /etc/ld.so.conf.d/

ls

查找带有“i386”的文件名

我的是“i386-linux-gnu_GL.conf”

然后我写道,

sudo gedit i386-linux-gnu_GL.conf 

然后使用 gedit 添加 32 位驱动程序的路径。
我的是“/usr/lib32/”。

如果您找不到 32 位驱动程序位置,只需搜索它。

保存。打开终端并输入:

sudo ldconfig

此后,我的《半条命2》运行完美。:D

相关内容