因此,我在 Ubuntu 上运行 64 位硬件,并尝试玩 Quake 3,但我无法安装Libgl1
。
sudo apt-get install --reinstall libgl1-mesa-glx:i386
Reading package lists... Done
Building dependency tree
Reading state information... Done
Reinstallation of libgl1-mesa-glx:i386 is not possible, it cannot be downloaded.
0 upgraded, 0 newly installed, 0 to remove and 4 not upgraded.
答案1
当我尝试在 virtualbox 中的 ubuntu mate 上安装 kivy 时,出现了/usr/bin/ld: cannot find -lGL
错误。使用下面的解决方法,我能够按照以下说明成功完成安装。
sudo apt install libglu1-mesa-dev
答案2
如您所知,i386 表示您尝试安装的包适用于 32 位系统。
如此处所述:https://askubuntu.com/questions/522372/installing-32-bit-libraries-on-ubuntu-14-04-lts-64-bit 您可以在 64 位系统中安装 32 位库。
在此链接中我们阅读https://bugs.launchpad.net/ubuntu/+source/mesa/+bug/949606:
64 位开发包包含它们提供用于链接的 64 位版本的库文件,但不包含 32 位版本的库文件。然而,在以前的 Ubuntu 版本中,可以通过安装 ia32-libs(其中包含所需的 32 位库文件)使用 64 位开发包编译 32 位应用程序。
在转向多架构的过程中,32 位库文件将从 ia32-libs 中删除。多架构(我假设)旨在保持架构分离,因此通常的解决方案是在编译 32 位应用程序时安装 i386 版本的 dev 包,即与 64 位 dev 包并排安装。
但是,有些 64 位开发包与 32 位开发包有冲突。这会导致无法同时安装它们,从而造成倒退的情况 - 您不得不要么安装 32 位包(这会破坏 64 位编译),要么安装 64 位包(这会破坏 32 位编译)。
例如 libglu1-mesa-dev,它与 libglu1-mesa-dev:i386 冲突。libglu1-mesa-dev 文件包含 32 位所需的所有开发文件除了32 位库文件。它包含 64 位库文件。由于库文件是开发文件的一部分,libglu1-mesa-dev 不包含 32 位所需的所有开发文件,即它不包含多架构所需的所有开发文件。我认为它应该包含构建多架构应用程序所需的所有必要文件。
两种解决方法是:
在编译 32 位应用程序之前手动重新安装所需的 i386 dev 包,然后在编译 64 位应用程序之前手动重新安装所需的 amd64 dev 包。这真的很麻烦。
安装 i386 二进制包(例如 libglu1-mesa:i386)和 amd64 dev 包(例如 libglu1-mesa-dev),并手动为 i386 libXYZ.so 包创建符号链接(例如 sudo ln -s /usr/lib/i386-linux-gnu/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so)。这是一个更持久的解决方案,但设置起来非常麻烦,因为您必须手动找到每个缺失的库,而一些库文件(如 mesa/libGL.so.1)位于子文件夹中。
答案3
作为@GabrieleMartini 所说内容的延伸(我忽略了很多细节,不要把我钉在十字架上):
您的错误信息显示:
Reinstallation of libgl1-mesa-glx:i386 is not possible, it cannot be downloaded.
首先,我们需要解决“无法下载问题”。
尝试sudo dpkg --add-architecture i386
(考虑 32 位软件包,根据Debian 指南),
然后sudo apt install libgl1-mesa-glx:i386
再说一遍。
虽然链接的信息现在有点过时了,Ubuntu 软件包网站显示软件包中包含 libGL.so.1 的英特尔 32 位(i386)库libgl1-mesa-glx
。
在 64 位 (x86_64) 系统上,您通常会收到x86_64-linux-gnu
libGL.so.1 二进制文件的版本。当您的软件包管理器设置为同时查找 32 位 (i386) 软件包时,
libgl1-mesa-glx:i386
将指定您想要该软件包二进制文件的 i386 (32 位) 版本,并且应该修复“缺少 libGL.so.1”问题。
希望这对你有帮助:)
如果您好奇的话,其余的是补充信息......
基本上所有
- 静态库(与应用程序二进制文件捆绑在一起)
和
- 动态库(启动时与应用程序一起加入)
进入某个目录(或文件夹,如果你熟悉的话)lib
在 Linux 上,其中很多都在/usr/lib
,也就是说,用户安装的库。
你很可能已经拥有 64 位 (x86_64) 版本的 libGL.so.1 二进制文件,位于
/usr/lib/x86_64-linux-gnu/libGL.so.1
而缺少的是 32 位模拟
/usr/lib/i386-linux-gnu/libGL.so.1
运行后应该会出现sudo apt install libgl1-mesa-glx:i386
包含 libGL.so.1 的 32 位版本二进制文件(同样,根据有些过时的Ubuntu 软件包网站)
答案4
对于使用 Ubuntu 的我来说,我曾经apt search
成功找到一个包:
libgl1/jammy 1.4.0-1 amd64
Vendor neutral GL dispatch library -- legacy GL support
然后sudo apt install libgl1
解决了所有问题。安装的动态库是:
/usr/lib/x86_64-linux-gnu/libGL.so.1 <--- Get it now
/usr/lib/x86_64-linux-gnu/libGL.so.1.7.0
/usr/lib/x86_64-linux-gnu/libGLX.so.0
/usr/lib/x86_64-linux-gnu/libGLX.so.0.0.0
/usr/lib/x86_64-linux-gnu/libGLX_indirect.so.0
/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0
/usr/lib/x86_64-linux-gnu/libGLX_mesa.so.0.0.0
/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0
/usr/lib/x86_64-linux-gnu/libGLdispatch.so.0.0.0