如何下载 libgl.so.1?

如何下载 libgl.so.1?

因此,我在 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 位所需的所有开发文件,即它不包含多架构所需的所有开发文件。我认为它应该包含构建多架构应用程序所需的所有必要文件。

两种解决方法是

  1. 在编译 32 位应用程序之前手动重新安装所需的 i386 dev 包,然后在编译 64 位应用程序之前手动重新安装所需的 amd64 dev 包。这真的很麻烦。

  2. 安装 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-gnulibGL.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

相关内容