因为 Linux 版 Steam 客户端只有 32 位二进制文件,所以我想安装libnvidia-gl:i386在我的 64 位 Ubuntu 操作系统上。
但是,如果我这样做,包管理器会卸载 cuda-11。但是我需要 cuda-11。
如何让 64 位和 32 位版本的 libnvidia-gl 共存而不干扰 cuda?
$ sudo apt install libnvidia-gl-455:i386
...
The following additional packages will be installed:
libnvidia-common-455 libnvidia-compute-455 libnvidia-decode-455 libnvidia-encode-455 libnvidia-fbc1-455
The following packages will be REMOVED:
cuda-11-1 cuda-demo-suite-11-1 cuda-drivers cuda-drivers-455 cuda-runtime-11-1 libnvidia-gl-455 libnvidia-ifr1-455 nvidia-driver-455
The following NEW packages will be installed:
libnvidia-gl-455:i386
The following packages will be upgraded:
libnvidia-common-455 libnvidia-compute-455 libnvidia-decode-455 libnvidia-encode-455 libnvidia-fbc1-455
5 upgraded, 1 newly installed, 8 to remove and 34 not upgraded.
Need to get 42.2 MB of archives.
After this operation, 195 MB disk space will be freed.
Do you want to continue? [Y/n]
答案1
2023 年 2 月更新:Nvidia 已恢复为 CUDA 提供 32 位库。这应该只是使用其存储库的原因。
Steam 和 Linux 上的大多数游戏都依赖于可用的 32 位 OpenGL 库。然而,Nvidia计划暂时放弃对 CUDA 的 32 位支持。幸运的是,可以手动安装必要的 32 位库以使 Steam 正常工作。
我建议你从Nvidia 存储库首先,然后检查已安装的驱动程序版本。显然,32 位库文件必须与安装的驱动程序版本相匹配。可以使用安装程序提供的仅提取选项获取相应的文件,例如 465.19.01找司机然后执行 ./NVIDIA-Linux-x86_64-465.19.01.run -x
i386 库文件位于名为“32”的文件夹中。要手动安装 32 位库:
chmod u+x NVIDIA-Linux-x86_64-465.19.01.run
./NVIDIA-Linux-x86_64-465.19.01.run -x
cd NVIDIA-Linux-x86_64-465.19.01
cd 32
sudo cp libEGL* libGLESv* libGLX* libnvidia-egl* libnvidia-gl* libnvidia-tls* /usr/lib32
有一些符号链接需要创建(适当更新版本号)(这一步可能没有必要?):
cd /usr/lib32
sudo ln -s libEGL_nvidia.so.465.19.01 libEGL_nvidia.so.0
sudo ln -s libGLESv1_CM_nvidia.so.465.19.01 libGLESv1_CM_nvidia.so.1
sudo ln -s libGLESv2_nvidia.so.465.19.01 libGLESv2_nvidia.so.2
sudo ln -s libGLX_nvidia.so.465.19.01 libGLX_indirect.so.0
sudo ln -s libGLX_nvidia.so.465.19.01 libGLX_nvidia.so.0
如果你的 /usr/lib32 没有检查库,创造文件 /etc/ld.so.conf.d/nvidia32.conf 内容如下:
/usr/lib32
您可能需要运行此程序以便系统检测新的库:
sudo ldconfig
答案2
steam 的 github 页面上有一个关于这个问题的帖子。那里有一些解决方案/解决方法,但我没有时间检查它们(或者不喜欢破坏包管理器的解决方法),所以现在就放弃了。现在我有带有附加:i386
库的 v460 驱动程序(我之前添加了外部架构)并且暂时删除了 CUDA。
我认为最干净的方式是使用 CUDA 环境运行 Rapids docker 容器。另一方面,这会迫使您学习 docker、配置新的 docker 环境,并且可能会引入一些其他与 docker 相关的问题,但至少这是保持一切干净并与原始系统分离的一种解决方案。在github上回复这个问题关于如何操作还有进一步的解释。如果你真的不介意这种设置,那么这可能是你的选择。
在我的案例中,由于某些驱动程序和 cuda 存储库冲突,安装其他库时也出现了问题:i386
(它们禁用了驱动程序并删除了软件包)。我还必须完全清除 nvidia 和 cuda,从中删除 cuda 存储库并再次安装 nvidia 驱动程序(现在使用)。如果您遇到问题,您可以随时使用以下命令检查库和驱动程序的状态::amd64
/etc/apt/sources.list
libnvidia-gl-460:i386
apt-cache policy nvidia-driver-460 libnvidia-gl-460 libnvidia-gl-460:i386
答案3
如果您使用来自标准(专有/受限)存储库的 Nvidia 驱动程序,它们会附带 64 位和 32 位版本,以及在更新安装新内核时重建 Nvidia 模块的所有“粘合”代码。标准存储库中也提供 steam,安装 Nvidia 驱动程序和 steam 后,不会出现“丢失”库的问题。
cuda 应该被视为只是一个应用程序,带有一些奇怪且不必要的软件包依赖项,例如 Nvidia 驱动程序。虽然标准存储库中也提供 cuda,但很多时候,您需要/需要特定版本的 cuda(硬件限制等)。如果您使用 Nvidia 提供的安装方法安装此类较旧/较新版本,请避免使用 deb 文件及其对某些随机 Nvidia 驱动程序的不必要依赖项,并使用 .run 文件。运行文件不会引入任何不必要的依赖项,您应该跳过任何 Nvidia 驱动程序提供,并可以选择非系统安装位置(因此您可以在不同位置安装多个 CUDA 版本)。
本网站的其他答案中提供了具体的安装说明,请参阅: