CentOS 64位错误 ELF 解释器

我刚刚安装了 CentOS 664位版本,我试图在一台64位机器上安装一个32位应用程序,结果出现了这样的错误:

/lib/ld-linux.so.2: Bad ELF 解释器: 没有这样的文件或目录

我刚接触 Linux,我该如何解决这个问题?

386493 次浏览

您使用的是64位系统,并且没有安装32位库支持。

为32位可执行文件安装(基线)支持

(如果在设置中没有使用 sudo,请阅读下面的说明)

Fedora/Red Hat 系列中的大多数桌面 Linux 系统:

 pkcon install glibc.i686

可能是一些桌面 Debian/Ubuntu 系统:

pkcon install ia32-libs

Fedora 或者更新的 Red Hat,CentOS:

 sudo dnf install glibc.i686

老 RHEL,CentOS:

   sudo yum install glibc.i686

甚至更老的 RHEL,CentOS:

  sudo yum install glibc.i386

Debian 或 Ubuntu:

   sudo apt-get install ia32-libs

应该可以获得所需的(第一个,主要的)库。

一旦你有了这个,你可能需要支持的图书馆

任何需要安装 glibc.i686glibc.i386的人可能也会遇到其他库依赖项。要标识提供任意库的包,可以使用

 ldd /usr/bin/YOURAPPHERE

如果你不确定它是否在 /usr/bin中,你也可以依靠它

 ldd $(which YOURAPPNAME)

输出如下:

    linux-gate.so.1 =>  (0xf7760000)
libpthread.so.0 => /lib/libpthread.so.0 (0xf773e000)
libSM.so.6 => not found

检查缺少的库(例如上面输出中的 libSM.so.6) ,并且对于每个库,您都需要找到提供它的包。

命令查找每个分发系列的包

Fedora/Red Hat Enterprise/CentOS:

 dnf provides /usr/lib/libSM.so.6

或者,在旧版本的 RHEL/CentOS 上:

 yum provides /usr/lib/libSM.so.6

或者,在 Debian/Ubuntu 上:

首先,安装和下载 apt-file的数据库

 sudo apt-get install apt-file && apt-file update

然后用

 apt-file find libSM.so.6

注意(通常)情况下的前缀路径 /usr/lib; 很少有一些库由于历史原因仍然存在于 /lib之下... ... 在典型的64位系统中,32位库存在于 /usr/lib中,而64位库存在于 /usr/lib64中。

(Debian/Ubuntu 以不同的方式组织多架构库。)

为丢失的库安装包

以上应该给你一个软件包的名称,例如:

libSM-1.2.0-2.fc15.i686 : X.Org X11 SM runtime library
Repo        : fedora
Matched from:
Filename    : /usr/lib/libSM.so.6

在这个示例中,包的名称是 libSM包的32位版本的名称是 libSM.i686

然后,您可以使用 GUI 中的 pkcon或者适当的 sudo dnf/yum/apt-get安装包来获取所需的库... ..。例如 pkcon install libSM.i686。如果需要,可以完全指定版本。例如 sudo dnf install ibSM-1.2.0-2.fc15.i686

有些库的名字前面会有一个“ epoch”指示符; 这可以省略(好奇的人可以阅读下面的注释)。

笔记

警告

顺便说一句,你所面临的问题要么意味着你的 RPM (相当于。DPkg/DSelect)数据库损坏,或者您试图运行的应用程序没有通过包管理器安装。如果您是 Linux 新手,您可能希望尽可能避免使用来自软件包管理器以外的其他来源的软件..。

如果您不在设置中使用“ sudo”

类型

su -c

每次你看到 sudo,例如,

su -c dnf install glibc.i686

关于库名中的时代指示符

名称前面的“ epoch”指示符是底层 RPM 库处理版本号的方式的工件; 例如。

2:libpng-1.2.46-1.fc16.i686 : A library of functions for manipulating PNG image format files
Repo        : fedora
Matched from:
Filename    : /usr/lib/libpng.so.3

在这里,可以省略 2:; 只需要 pkcon install libpng.i686sudo dnf install libpng-1.2.46-1.fc16.i686。(它含糊地暗示了这样的事情: 在某个时刻,libpng包的版本号向后滚动,并且“ epoch”必须增加,以确保在更新期间新版本被认为是“较新”的。或者类似的事情发生过。两次。)


更新 以澄清和更全面地涵盖各种包管理器选项(2016年3月)

刚刚在新安装的 CentOS 6.464位机器上遇到了同样的问题。一个 yum 命令就可以解决99% 的类似问题:

Yum groupinstall“兼容库”

要么以“ sudo”作为前缀,要么以 root 用户身份运行,哪种方式最适合您都可以。

只是想在 BRPocock 中添加一条评论,但是我没有足够的特权。

因此,我的贡献是为每个试图从 IBM 的集成总线包安装 IBMIntegrationToolkit 的人提供的。

当您尝试从文件夹/Integration _ Toolkit/IM _ Linux (要运行的文件是“ install”)运行“ InstallationManager”命令时,您会在本文中看到错误。

解决这个问题的进一步说明,你可以在这个 IBM 的网页上找到: Https://www-304.ibm.com/support/docview.wss?uid=swg21459143

希望这对安装它的人有帮助。

通常,当您遇到这样的错误时,只需要执行

yum provides ld-linux.so.2

然后你会看到这样的东西:

glibc-2.20-5.fc21.i686 : The GNU libc libraries
Repo        : fedora
Matched from:
Provides    : ld-linux.so.2

然后像 BRPocock 所写的那样运行以下命令(以防您想知道其中的逻辑是什么... ...) :

yum install glibc.i686

Sudo yum 安装 fontconfig freetype libfreetype.so.6 libfontconfig.so 1 libstdc + + . so.6

试试看

$ yum provides ld-linux.so.2
$ yum update
$ yum install glibc.i686 libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6

希望这里没人。

我会添加为 Debian 你需要在系统中至少有一个编译器(根据 Debian Stretch 和 Jessie 32位库)。

我安装 apt-get install -y gcc-multilib是为了在我的 docker 容器中运行基于 debian: jessie 的32位可执行文件。

您也可以安装 OpenJDK 32位(.i686)代替。根据我的测试,它将被安装和工作没有问题。

sudo yum install java-1.8.0-openjdk.i686

注:

Java-1.8.0-openjdk包包含 只有 JRE。如果你想开发 Java 程序,那么安装 Java-1.8.0-openjdk-devel包。

有关详细信息,请参阅 给你

在我的例子中,我使用命令 yum install redhat-lsb解决了这个问题