【问题标题】:CentOS 64 bit bad ELF interpreterCentOS 64 位坏 ELF 解释器
【发布时间】:2012-01-09 19:48:03
【问题描述】:

我刚刚安装了 CentOS 6 64 位版本,我正在尝试在 64 位机器上安装 32 位应用程序并收到此错误:

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

我是 Linux 新手。我该如何解决这个问题?

【问题讨论】:

    标签: linux centos 32bit-64bit elf centos6


    【解决方案1】:

    您使用的是 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
    

    在本例中,包的名称是 libSM32 位版本的包的名称是 libSM.i686

    然后,您可以在 GUI 中使用 pkconsudo dnf/yum/apt-get 来安装软件包以获取必要的库...。例如pkcon install libSM.i686。如有必要,您可以完全指定版本。例如sudo dnf install ibSM-1.2.0-2.fc15.i686

    有些图书馆的名字前会有一个“时代”标志;这可以省略(好奇的可以阅读下面的注释)。

    注意事项

    警告

    顺便说一句,您面临的问题可能意味着您的 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 月)

    【讨论】:

    • iv 已安装,现在我正在获取 libpam.so.0:无法打开共享对象文件
    • 如果您的应用没有列出所需的库,您将不得不自己寻找并安装它们;如果你幸运的话,它们可以通过 yum 获得。您可以使用“ldd(二进制)”来列出库。对于列出的每个库,它不会给出像“/lib/ld-linux.so.2 (0x4f8d9000)”或“libc.so.6 => /lib/libc.so.6 (0x4f8fa000)”这样的读数",尝试: sudo yum 提供 */lib/libWHATEVER.so -- 查找包名,然后 sudo yum install PACKAGE.i686 进行安装。 (确保获取 i386 或 i686,而不是 x86_64,因为它会默认安装在您的系统上)
    • 当您拥有必须迁移到 64 位系统的 32 位软件时,此答案是天赐之物。
    • 这对于在 Fedora 20 上安装 Oracle 的 jre 1.7 非常有帮助。除了 glibc.i686,我还必须安装 libgcc.i686。
    【解决方案2】:

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

    yum groupinstall "兼容性库"

    要么使用 'sudo' 作为前缀,要么以 root 身份运行,以最适合您的方式运行。

    【讨论】:

      【解决方案3】:

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

      所以我的贡献是为所有尝试从 IBM 的 Integration Bus 包安装 IBM Integration Toolkit 的人。

      当您尝试从文件夹 /Integration_Toolkit/IM_Linux 运行“安装管理器”命令(要运行的文件是“安装”)时,您会收到本文中显示的错误。

      您可以在此 IBM 网页中找到解决此问题的更多说明: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

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

      【讨论】:

        【解决方案4】:

        一般来说,当你遇到这样的错误时,就这样做

        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
        

        【讨论】:

          【解决方案5】:

          sudo yum install fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6

          【讨论】:

            【解决方案6】:

            试试

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

            希望这一切都解决了。

            【讨论】:

              【解决方案7】:

              我会为 Debian 添加系统中至少需要一个编译器(根据 Debian Stretch and Jessie 32-bit libraries)。

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

              【讨论】:

              • 请在您的回答中包含链接的基本部分
              【解决方案8】:

              您也可以安装 OpenJDK 32 位 (.i686)。根据我的测试,它会安装并正常工作。

              sudo yum install java-1.8.0-openjdk.i686
              

              注意:

              java-1.8.0-openjdk只包含 Java 运行时环境。如果您想开发 Java 程序,请安装 java-1.8.0-openjdk-devel 包。

              更多详情请见here

              【讨论】:

                【解决方案9】:

                就我而言,我已经使用命令yum install redhat-lsb解决了这个问题

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 2016-05-11
                  • 2012-08-31
                  • 2016-04-06
                  • 2019-02-19
                  • 2011-01-30
                  • 2012-05-06
                  • 1970-01-01
                  • 2013-04-08
                  相关资源
                  最近更新 更多