Intérprete ELF ruim de 64 bits do CentOS

183

Acabei de instalar a versão de 64 bits do CentOS 6, estou tentando instalar um aplicativo de 32 bits em uma máquina de 64 bits e obtive este erro:

/lib/ld-linux.so.2: intérprete incorreto de ELF: Esse arquivo ou diretório não existe

Eu sou novo no linux. Como eu resolvo isso?

c11ada
fonte

Respostas:

355

Você está em um sistema de 64 bits e não possui suporte à biblioteca de 32 bits instalado.

Para instalar o suporte (linha de base) para executáveis ​​de 32 bits

(se você não usar o sudo em sua configuração, leia a nota abaixo)

A maioria dos sistemas Linux para desktop da família Fedora / Red Hat:

 pkcon install glibc.i686

Possivelmente alguns sistemas desktop Debian / Ubuntu ?:

pkcon install ia32-libs

Fedora ou Red Hat, CentOS mais recente:

 sudo dnf install glibc.i686

RHEL mais antigo, CentOS:

   sudo yum install glibc.i686

RHEL ainda mais antigo, CentOS:

  sudo yum install glibc.i386

Debian ou Ubuntu:

   sudo apt-get install ia32-libs

você deve pegar a (primeira, principal) biblioteca de que você precisa.

Depois de ter isso, você provavelmente precisará de bibliotecas de suporte

Qualquer pessoa que precise instalar glibc.i686ou glibc.i386provavelmente também executará outras dependências da biblioteca. Para identificar um pacote que fornece uma biblioteca arbitrária, você pode usar

 ldd /usr/bin/YOURAPPHERE

se você não tem certeza, /usr/bintambém pode voltar

 ldd $(which YOURAPPNAME)

A saída será assim:

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

Verifique as bibliotecas ausentes (por exemplo, libSM.so.6na saída acima) e, para cada uma, você precisa encontrar o pacote que a fornece.

Comandos para encontrar o pacote por família de distribuição

Fedora / Red Hat Enterprise / CentOS:

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

ou, no RHEL / CentOS mais antigo:

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

ou, no Debian / Ubuntu:

primeiro, instale e faça o download do banco de dados para apt-file

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

depois pesquise com

 apt-file find libSM.so.6

Observe o caminho do prefixo /usr/libno caso (usual); Raramente, algumas bibliotecas ainda vivem sob /libpor razões históricas ... em sistemas de 64 bits típicos, bibliotecas de 32 bits viver em /usr/libe bibliotecas de 64 bits viver em /usr/lib64.

(Debian / Ubuntu organizam bibliotecas de arquitetura múltipla de maneira diferente.)

Instalando pacotes para bibliotecas ausentes

O acima deve fornecer um nome de pacote, por exemplo:

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

Neste exemplo, o nome do pacote é libSMe o nome da versão de 32 bits do pacote élibSM.i686 .

Em seguida, você pode instalar o pacote para obter a biblioteca necessária usando pkconuma GUI, ou sudo dnf/yum/apt-getconforme apropriado…. Por exemplo pkcon install libSM.i686. Se necessário, você pode especificar a versão completamente. Por exemplo sudo dnf install ibSM-1.2.0-2.fc15.i686.

Algumas bibliotecas terão um designador de "época" antes do nome; isso pode ser omitido (os curiosos podem ler as notas abaixo).

Notas

Aviso

Incidencialmente, o problema que você está enfrentando implica que o banco de dados do RPM (resp. DPkg / DSelect) está corrompido ou que o aplicativo que você está tentando executar não foi instalado pelo gerenciador de pacotes. Se você é novo no Linux, provavelmente deseja evitar o uso de software de fontes diferentes do seu gerenciador de pacotes, sempre que possível ...

Se você não usar "sudo" na sua configuração

Tipo

su -c

toda vez que você vê sudo, por exemplo,

su -c dnf install glibc.i686

Sobre o designador de época em nomes de bibliotecas

O designador de "época" antes do nome é um artefato da maneira como as bibliotecas RPM subjacentes lidam com números de versão; por exemplo

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

Aqui, o 2:pode ser omitido; apenas pkcon install libpng.i686ou sudo dnf install libpng-1.2.46-1.fc16.i686. (Isso implica vagamente algo como: em algum momento, o número da versão do libpngpacote foi revertido e a "época" teve que ser incrementada para garantir que a versão mais recente fosse considerada "mais nova" durante as atualizações. Ou algo semelhante aconteceu. .)


Atualizado para esclarecer e cobrir as várias opções do gerenciador de pacotes mais detalhadamente (março de 2016)

BRPocock
fonte
iv instalado que agora estou recebendo libpam.so.0: arquivo objeto compartilhado não pode abrir
c11ada
7
Se o seu aplicativo não listar as bibliotecas necessárias, você precisará procurá-las e instalá-las; se tiver sorte, eles estarão disponíveis no yum. Você pode usar "ldd (binário)" para listar bibliotecas. Para cada biblioteca listada, isso não fornece uma leitura como "/lib/ld-linux.so.2 (0x4f8d9000)" ou "libc.so.6 => /lib/libc.so.6 (0x4f8fa000) ", tente: sudo yum fornece * / lib / libWHATEVER.so - para encontrar o (s) nome (s) do pacote e, em seguida, sudo yum instale o PACKAGE.i686 para instalá-lo. (Certificando-se de pegar o i386 ou i686, x86_64 não como seria instalado por padrão no seu sistema)
BRPocock
Esta resposta é uma dádiva de Deus quando você possui um software de 32 bits que deve ser migrado para o sistema de 64 bits.
Froggythefrog 11/03/2013
Isso foi muito útil para instalar o jre 1.7 do Oracle no Fedora 20. Além do glibc.i686, eu tive que instalar o libgcc.i686.
John Schmitt
17

Acabei de encontrar o mesmo problema em uma máquina CentOS 6.4 de 64 bits recém-instalada. Um único comando yum corrigirá isso mais 99% de problemas semelhantes:

yum groupinstall "Bibliotecas de compatibilidade"

Prefixe isso com 'sudo' ou execute como root, o que for melhor para você.

Phil Edwards
fonte
14

Em geral, quando você receber um erro como esse, basta

yum provides ld-linux.so.2

então você verá algo como:

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

e então basta executar o seguinte, como o BRPocock escreveu (caso você esteja se perguntando qual era a lógica ...):

yum install glibc.i686
Moe Singh
fonte
3

Experimentar

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

Espero que isso esclareça.

The Bumpaster
fonte
0

Só queria adicionar um comentário no BRPocock, mas não tenho privilégios suficientes.

Portanto, minha contribuição foi para todos que tentaram instalar o IBM Integration Toolkit a partir do pacote de barramento de integração da IBM.

Ao tentar executar o comando "Installation Manager" da pasta / Integration_Toolkit / IM_Linux (o arquivo a ser executado é "install"), você obtém o erro mostrado nesta postagem.

Instruções adicionais para corrigir esse problema, você encontrará na página da Web da IBM: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

Espero que isso ajude quem estiver tentando instalar isso.

mmarquezvacas
fonte
0

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

Nithin
fonte
0

Eu adicionaria ao Debian que você precisa de pelo menos um compilador no sistema (de acordo com as bibliotecas Debian Stretch e Jessie de 32 bits ).

Eu instalei apt-get install -y gcc-multilibpara executar o arquivo executável de 32 bits no meu container docker com base no debian: jessie.

Vitaliy
fonte
inclua as partes essenciais do link na sua resposta
Ibo
0

Você também pode instalar o OpenJDK de 32 bits ( .i686). De acordo com o meu teste, ele será instalado e funcionará sem problemas.

sudo yum install java-1.8.0-openjdk.i686

Nota:

O pacote java-1.8.0-openjdk contém apenas o Java Runtime Environment . Se você deseja desenvolver programas Java, instale o pacote java-1.8.0-openjdk-devel .

Veja aqui para mais detalhes.

Mir-Ismaili
fonte