Nvidia API不匹配


27

我原本计划在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-current270.41.19。我认为是驱动程序和模块,合而为一。

我使用的是X-SWAT PPA,我注意到该nvidia-settings软件包已提高到275.09.07。由于这只是一个设置应用程序,因此我认为这种不匹配与此无关。它与所描述的问题也不相同。

我宁愿不退回标准的Nvidia驱动程序,因为它在我的GTX580上还不够稳定。我接受一个接受手动设置的答案,并在内核重新编译(即某些DKMS向导)时使其重新编译,但是它必须可以工作。我不想在每次内核升级后重新启动时都回到文本模式。

编辑: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/版本?


您在64位系统上吗?如果是这样,那么正常游戏和残破游戏之间的区别是32位还是64位?如果真是这样,则可能是32位或64位用户空间组件已过时。
James Henstridge

我在64位上。听起来这可能是一个很好的诊断。Trine(也是本机64位)也可以使用。
奥利(Oli)

@James知道如何解决该问题吗?
奥利

我周围没有Nvidia系统,因此以下是一个猜测。32位用户空间库可能在下/usr/lib32。检查它们看起来是否与主要的64位版本相同。如果它们不同,请找出哪个软件包拥有它们并寻求更新。
James Henstridge

Answers:


17

执行以下操作为我在带有3.0.29内核的Ubuntu 12.04 64位上为我解决了该问题。希望能帮助到你。

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

4
dpkg --get-selections | grep nvidia找你有其他的NVIDIA包清洗
克里斯托弗·曼宁

感谢GSBabil,为我解决了类似的问题。之后需要重新启动,但是才能“启动”。
2013年

5
@ChristopherManning一个更简单的方法是sudo apt-get remove --purge nvidia *
Ben McCann

工作出色,谢谢!最后有了最新的驱动程序,Steam很高兴:D
Ads20000

@GSBabil我想给你买一杯啤酒真糟糕。
马修·斯克拉格

14

在发现大量旧文件后,我整理了/ 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的领主埃隆,并责成他建立一个奖学金,将其困在莫赫多尔,推向末日山,并编造一个命令来带给我(由我确实意味着我们所有人),在黑暗中束缚了我们。

够了。这是一个命令:

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)

大。因此,大型命令仅正确执行了两个链接。进一步查看之后,似乎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

至少它们已正确连接(如果有点麻烦)。该进行测试了。

编辑:这可行,但可以从我的努力中学到:保持简单。


我记得这样的地狱-只有我不冒险使用命令行(万一弄错了东西)来修复我的:P。
RolandiXor

7

也可以这样做:

$ 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

一切都好!


2
这很有用,因为它公开了已安装的旧版本。一旦我清除了它们,一切都将顺利启动。谢谢!
乔什·约翰逊

好。我为此感到高兴。
shgnInc

好答案。我浏览了清单并清理了清单,然后重新安装了所需的清单并重新启动。瞧!+1
nicorellius 2014年

7

我曾经遇到过这个问题,而且很容易修复。

以下内容基于不规则的内存,请当心!
首先,您需要查看/ 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 :)。
这应该为您提供正确版本的库并为您提供一个工作系统。


4

我遇到了这个问题,这影响了我在葡萄酒中的SWTOR启动器。阅读以上内容后,我决定尝试通过Ubuntu UI进行操作。这是对我有用的简单解决方案;

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

  1. 转到系统->管理->其他驱动程序
  2. 选择NVIDIA加速图形驱动程序,然后按“删除”按钮。之后请勿立即重启。
  3. 删除后,选择相同的驱动程序,然后单击“激活”。
  4. 现在重启。
  5. 应该是固定的。

3

经过一些测试,我发现该软件包:

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骑师仍推荐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 install nvidia-current或重新配置

线程: Nvidia驱动程序已更新-304.88和319.32的混合版本与此 相关,但我没有足够的功劳来发布。


1

在我安装了最新的实验性Nvidia驱动程序之后,这发生在我身上。我仍然想尽可能尝试使用最新的驱动程序,而不是还原到较旧的驱动程序,因此这对我有用:

sudo apt-get remove --purge nvidia*
sudo apt-get install nvidia-319
sudo reboot

0

删除所有nvidia软件包并重新安装确实是解决此问题的最简单方法。

首先,我使用以下命令删除了所有nvidia软件包:

$ dpkg --get-selections | grep nvidia | awk '{print $1}' | xargs sudo apt-get -y purge

然后,出于好奇,我重启了一下,看看我的图形界面是什么样子-分辨率差,速度慢,符合预期。

打开外壳后,我运行以下命令以重新安装nvidia:

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

一切再次正常。祝好运。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.