当前位置: 首页>>技术问答>>正文


Nvidia API不匹配

,

问题描述

我计划在Portal 2放松一天,但在启动Steam时(几周内第一次)我在终端上收到以下消息:

Error: API mismatch: the NVIDIA kernel module has version 270.41.19,
but this NVIDIA driver component has version 270.41.06.  Please make
sure that the kernel module and all NVIDIA driver components
have the same version.

我会承认,当它说司机时,我真的不知道它在说什么。 nvidia-current的概念是270.41.19。我认为这是驱动程序和模块,一体化。

我使用X-SWAT PPA,我注意到nvidia-settings包装已经提升到275.09.07。由于这只是一个设置应用程序,我不认为这种不匹配与此有任何关系。它也与描述的问题版本不同。

我宁愿不回到标准的Nvidia驱动程序,因为它在我的GTX580上不太稳定。我接受一个接受手动设置的答案,并在内核重新编译时重新编译(即一些DKMS魔法),但它必须工作。每次在内核升级后重新启动时,我都不想退回到text-mode。

编辑:Minecraft的工作没有一个关于驱动程序版本的投诉。 Penumbra在进入游戏时死于大致相同的错误。

编辑:这是我正在处理的32位文件。它们似乎都是正确的版本。

ls -l /usr/lib32/nvidia-current/ | awk '{ print $8 " " $9 " " $10 }'

libcuda.so -> libcuda.so.270.41.19
libcuda.so.1 -> libcuda.so.270.41.19
libcuda.so.270.41.19  
libGL.la  
libGL.so -> libGL.so.1
libGL.so.1 -> libGL.so.270.41.19
libGL.so.270.41.19  
libnvcuvid.so -> libnvcuvid.so.1
libnvcuvid.so.1 -> libnvcuvid.so.270.41.19
libnvcuvid.so.270.41.19  
libnvidia-cfg.so -> libnvidia-cfg.so.1
libnvidia-cfg.so.1 -> libnvidia-cfg.so.270.41.19
libnvidia-cfg.so.270.41.19  
libnvidia-compiler.so -> libnvidia-compiler.so.1
libnvidia-compiler.so.1 -> libnvidia-compiler.so.270.41.19
libnvidia-compiler.so.270.41.19  
libnvidia-glcore.so.270.41.19  
libnvidia-ml.so -> libnvidia-ml.so.1
libnvidia-ml.so.1 -> libnvidia-ml.so.270.41.19
libnvidia-ml.so.270.41.19  
libnvidia-tls.so.270.41.19  
libnvidia-wfb.so.1 -> libnvidia-wfb.so.270.41.19
libnvidia-wfb.so.270.41.19  
libOpenCL.so -> libOpenCL.so.1
libOpenCL.so.1 -> libOpenCL.so.1.0
libOpenCL.so.1.0 -> libOpenCL.so.1.0.0
libOpenCL.so.1.0.0  
libXvMCNVIDIA_dynamic.so.1 -> libXvMCNVIDIA.so.270.41.19
libXvMCNVIDIA.so -> libXvMCNVIDIA.so.270.41.19
libXvMCNVIDIA.so.1 -> libXvMCNVIDIA.so.270.41.19
libXvMCNVIDIA.so.270.41.19  

编辑2:我可能找到了一些东西。

潜伏在/usr/lib32/(不是nvidia-current子目录)中我发现了以下内容:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep 270

libcuda.so.1 -> libcuda.so.270.41.06
libcuda.so.270.41.06  
libGL.so.1 -> libGL.so.270.41.06
libGL.so.270.41.06  
libnvidia-compiler.so.270.41.06  
libnvidia-glcore.so.270.41.06  
libnvidia-tls.so.270.41.06  
libvdpau.so.1 -> libvdpau.so.270.41.06
libvdpau.so.270.41.06  
libvdpau_trace.so -> vdpau/libvdpau_trace.so.270.41.06

出于某种原因,/usr/lib32/nvidia-current/中的所有内容都是正确的版本,但/usr/lib32/中可能会破坏聚会。

编辑3:尝试追踪拥有这些文件的软件包失败:

find /usr/lib32 -iname '*270.41.06*' -exec dpkg -S "{}" \;

dpkg-query: no path found matching pattern /usr/lib32/libnvidia-compiler.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libGL.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/vdpau/libvdpau_nvidia.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/vdpau/libvdpau_trace.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libvdpau.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/tls/libnvidia-tls.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libnvidia-tls.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libcuda.so.270.41.06.
dpkg-query: no path found matching pattern /usr/lib32/libnvidia-glcore.so.270.41.06.

关于如何处理这些破碎版本的任何提示?删除它们?然后删除符号链接到./nvidia-current/版本?

最佳解决方法

在Ubuntu 12.04 64bit和3.0.29内核上执行以下操作解决了这个问题。希望能帮助到你。

sudo apt-get purge nvidia-current
sudo apt-get install nvidia-current

次佳解决方法

在发现有一堆旧文件时,我们用/usr /lib32 /我用以下命令将它们移出:

sudo find /usr/lib32 -iname '*270.41.06*' -exec mv {} {}.old \;

并重新启动X.这打破了一切3D。好哇。使用之前的推荐,我可以看到有四个断开的链接:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep 270

libcuda.so.1 -> libcuda.so.270.41.06
libGL.so.1 -> libGL.so.270.41.06
libvdpau.so.1 -> libvdpau.so.270.41.06
libvdpau_trace.so -> vdpau/libvdpau_trace.so.270.41.06

我没有手动更换四个文件的链接,而是去了Rivendell之王Elrond,并责成他建立一个可以进入Morhdorh的团契,蹒跚到Mount Doom并给我一个命令来带我(并且我意味着我们所有人)并且在黑暗中束缚我们。

够了。这是一个命令:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep 270 | cut -d' ' -f1 | xargs -l1 sudo bash -c "rm /usr/lib32/\$0 && ln -s /usr/lib32/nvidia-current/\$0 /usr/lib32/\$0"

她不壮观吗?它奏效了。我现在有4个闪亮的新符号链接:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep '/nvidia-current'

libcuda.so.1 -> /usr/lib32/nvidia-current/libcuda.so.1
libGL.so.1 -> /usr/lib32/nvidia-current/libGL.so.1
libOpenCL.so -> nvidia-current/libOpenCL.so
libvdpau.so.1 -> /usr/lib32/nvidia-current/libvdpau.so.1
libvdpau_trace.so -> /usr/lib32/nvidia-current/libvdpau_trace.so

然后我检查一下是否一切正常。在重新启动之前我想我应该检查链接是否正确:

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep '/nvidia-current' | cut -d' ' -f3 | xargs file

/usr/lib32/nvidia-current/libcuda.so.1:      symbolic link to `libcuda.so.270.41.19'
/usr/lib32/nvidia-current/libGL.so.1:        symbolic link to `libGL.so.270.41.19'
/usr/lib32/nvidia-current/libvdpau.so.1:     ERROR: cannot open `/usr/lib32/nvidia-current/libvdpau.so.1' (No such file or directory)
/usr/lib32/nvidia-current/libvdpau_trace.so: ERROR: cannot open `/usr/lib32/nvidia-current/libvdpau_trace.so' (No such file or directory)

大。所以mega-command只做了两个链接。再看一下,看起来libvdpau文件实际上存在于/usr/lib32/nvidia-current/vdpau/中。这段时间没有搞乱:

sudo rm /usr/lib32/libvdpau{,_trace}.so*
sudo ln -s /usr/lib32/{nvidia-current/vdpau/,}libvdpau.so*
sudo ln -s /usr/lib32/{nvidia-current/vdpau/,}libvdpau_trace.so*

ls -l /usr/lib32/ | awk '{ print $8 " " $9 " " $10 }' | grep '/nvidia-current' | cut -d' ' -f3 | xargs file

/usr/lib32/nvidia-current/libcuda.so.1:                      symbolic link to `libcuda.so.270.41.19'
/usr/lib32/nvidia-current/libGL.so.1:                        symbolic link to `libGL.so.270.41.19'
/usr/lib32/nvidia-current/vdpau/libvdpau.so.270.41.19:       ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib32/nvidia-current/vdpau/libvdpau_trace.so.270.41.19: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped

至少他们是正确的(如果有点笨拙)联系在一起。时间测试。

编辑:这有效,但从我的斗争中学习:保持简单。

第三种解决方法

也是这样做的:

$ dpkg --get-selections | grep nvidia

nvidia-common                   install
nvidia-current                  install
nvidia-current-updates              install
nvidia-experimental-x...            install
nvidia-settings                 install
nvidia-settings-updates             install

然后:

$ sudo apt-get purge nvidia-experimental-x...
...
$ sudo reboot

一切都好!

第四种方法

我曾经遇到过这个问题,而且修复起来非常容易。

以下是基于不完整的内存所以要小心!首先,您需要看到/usr /lib32 /中的nvidia库匹配:

/usr/lib32/libOpenCL.so  
/usr/lib32/nvidia-current  
/usr/lib32/nvidia-current/libGL.la  
/usr/lib32/nvidia-current/libGL.so  
/usr/lib32/nvidia-current/libGL.so.1  
/usr/lib32/nvidia-current/libGL.so.270.41.06  
/usr/lib32/nvidia-current/libOpenCL.so  
/usr/lib32/nvidia-current/libOpenCL.so.1  
/usr/lib32/nvidia-current/libOpenCL.so.1.0  
/usr/lib32/nvidia-current/libOpenCL.so.1.0.0  
/usr/lib32/nvidia-current/libXvMCNVIDIA.so  
/usr/lib32/nvidia-current/libXvMCNVIDIA.so.1  
/usr/lib32/nvidia-current/libXvMCNVIDIA.so.270.41.06  
/usr/lib32/nvidia-current/libXvMCNVIDIA_dynamic.so.1  
/usr/lib32/nvidia-current/libcuda.so  
/usr/lib32/nvidia-current/libcuda.so.1  
/usr/lib32/nvidia-current/libcuda.so.270.41.06  
/usr/lib32/nvidia-current/libnvcuvid.so  
/usr/lib32/nvidia-current/libnvcuvid.so.1  
/usr/lib32/nvidia-current/libnvcuvid.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-cfg.so  
/usr/lib32/nvidia-current/libnvidia-cfg.so.1  
/usr/lib32/nvidia-current/libnvidia-cfg.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-compiler.so  
/usr/lib32/nvidia-current/libnvidia-compiler.so.1  
/usr/lib32/nvidia-current/libnvidia-compiler.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-glcore.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-ml.so  
/usr/lib32/nvidia-current/libnvidia-ml.so.1  
/usr/lib32/nvidia-current/libnvidia-ml.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-tls.so.270.41.06  
/usr/lib32/nvidia-current/libnvidia-wfb.so.270.41.06  
/usr/lib32/nvidia-current/tls  
/usr/lib32/nvidia-current/tls/libnvidia-tls.so.270.41.06  
/usr/lib32/nvidia-current/vdpau  
/usr/lib32/nvidia-current/vdpau/libvdpau.so.270.41.06  
/usr/lib32/nvidia-current/vdpau/libvdpau_nvidia.so  
/usr/lib32/nvidia-current/vdpau/libvdpau_nvidia.so.1  
/usr/lib32/nvidia-current/vdpau/libvdpau_nvidia.so.270.41.06  
/usr/lib32/nvidia-current/vdpau/libvdpau_trace.so.270.41.06  
/usr/lib32/vdpau 

根据你所描述的,他们很可能与这些不匹配。如果是这种情况,那么你需要删除它们(仔细 – 使用文件管理器,不要尝试rm -rf !!!!!!!!!),然后重新安装nvidia-current :)。这应该为您提供正确的库版本,并为您提供一个工作系统。

第五种方法

我遇到了这个影响我的葡萄酒SWTOR发射器的问题。阅读上面的内容,我决定尝试通过Ubuntu UI做一些事情。这是对我有用的简单解决方案;

通过UI删除并重新安装其他驱动程序:

  1. 转到系统 – >管理 – >其他驱动程序

  2. 选择NVIDIA加速图形驱动程序,然后按”remove”按钮。之后不要重新开始。

  3. 删除后,选择相同的驱动程序并单击”activate”。

  4. 现在重启。

  5. 应该是固定的。

第六种方法

经过一些测试后我发现了包裹:

nvidia-current
nvidia-304
nvidia-settings
nvidia-settings-304

适用于所有内核3.2.0- *和3.8.0- *,

包裹:

nvidia-current-updates
nvidia-experimental-304
nvidia-304-updates
nvidia-settings-updates
nvidia-settings-experimental-304
nvidia-settings-304-updates
nvidia-319
nvidia-experimental-310
nvidia-319-updates
nvidia-settings-319
nvidia-settings-experimental-310
nvidia-settings-319-updates

仅适用于内核3.8.0- *。

当内核3.2.0- *只存在时,Ubuntu jockey仍然推荐319版本。这是一个错误。

此外命令:

$ sudo apt-get purge nvidia-current
$ sudo apt-get install nvidia-current

要么

$ sudo dpkg-reconfigure nvidia-current

为每个次要版本仅为一个版本的内核安装驱动程序,并为所有其他版本删除它。

所以,在我的情况下,我安装了以下内核:

3.8.0-32-generic
3.2.0-55-generic-pae
3.2.0-55-generic
3.2.0-54-generic-pae
3.2.0-54-generic
3.2.0-53-generic-pae
3.2.0-53-generic
3.2.0-52-generic-pae
3.2.0-52-generic
3.2.0-51-generic-pae
3.2.0-51-generic
3.2.0-49-generic-pae
3.2.0-49-generic

我的驱动程序仅用于:

3.8.0-32-generic
3.2.0-55-generic-pae

在使用其他内核启动时,未安装驱动程序结果。

在我看来,包中的某个地方有一个错误的指示,只能为某些内核构建和安装。

在任何地方,发出以下命令可以解决问题:

$ sudo dkms install nvidia-304/304.88 -k 3.8.0-32-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-55-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-55-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-54-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-54-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-53-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-53-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-52-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-52-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-51-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-51-generic-pae
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-49-generic
$ sudo dkms install nvidia-304/304.88 -k 3.2.0-49-generic-pae

直到下一个apt-get安装nvidia-current或重新配置

线程:Nvidia driver updated – mixed versions of 304.88 and 319.32与此相关,但我没有足够的信用在那里发布。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/6967.html,未经允许,请勿转载。