CentOS 64 bit mal interprete ELF

183

Acabo de instalar la versión CentOS 6 de 64 bits, estoy tratando de instalar una aplicación de 32 bits en una máquina de 64 bits y obtuve este error:

/lib/ld-linux.so.2: mal intérprete ELF: no existe tal archivo o directorio

Soy nuevo en Linux. ¿Cómo resuelvo esto?

c11ada
fuente

Respuestas:

355

Estás en un sistema de 64 bits y no tienes instalado un soporte de biblioteca de 32 bits.

Para instalar (línea base) soporte para ejecutables de 32 bits

(si no usa sudo en su configuración, lea la nota a continuación)

La mayoría de los sistemas Linux de escritorio en la familia Fedora / Red Hat:

 pkcon install glibc.i686

¿Posiblemente algunos sistemas Debian / Ubuntu de escritorio ?:

pkcon install ia32-libs

Fedora o Red Hat más reciente, CentOS:

 sudo dnf install glibc.i686

RHEL más viejo, CentOS:

   sudo yum install glibc.i686

Incluso más viejo RHEL, CentOS:

  sudo yum install glibc.i386

Debian o Ubuntu:

   sudo apt-get install ia32-libs

debería tomar la biblioteca (primera, principal) que necesita.

Una vez que tenga eso, probablemente necesitará bibliotecas de soporte

Cualquiera que necesite instalar glibc.i686o glibc.i386probablemente también se encontrará con otras dependencias de la biblioteca. Para identificar un paquete que proporciona una biblioteca arbitraria, puede usar

 ldd /usr/bin/YOURAPPHERE

si no está seguro de que está dentro /usr/bin, también puede recurrir

 ldd $(which YOURAPPNAME)

La salida se verá así:

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

Compruebe si hay bibliotecas faltantes (por ejemplo, libSM.so.6en el resultado anterior), y para cada una necesita encontrar el paquete que lo proporciona.

Comandos para encontrar el paquete por familia de distribución

Fedora / Red Hat Enterprise / CentOS:

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

o, en RHEL / CentOS anteriores:

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

o, en Debian / Ubuntu:

primero, instale y descargue la base de datos para apt-file

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

luego busca con

 apt-file find libSM.so.6

Tenga en cuenta la ruta del prefijo /usr/liben el caso (habitual); raramente, algunas bibliotecas aún viven /libpor razones históricas ... En los sistemas típicos de 64 bits, las bibliotecas de 32 bits viven /usr/liby las bibliotecas de 64 bits viven /usr/lib64.

(Debian / Ubuntu organiza las bibliotecas de arquitectura múltiple de manera diferente).

Instalar paquetes para bibliotecas faltantes

Lo anterior debería darle un nombre de paquete, por ejemplo:

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

En este ejemplo, el nombre del paquete es libSMy el nombre de la versión de 32 bits del paquete eslibSM.i686 .

Luego puede instalar el paquete para obtener la biblioteca requerida utilizando pkconuna GUI, o sudo dnf/yum/apt-getsegún corresponda ... Por ej pkcon install libSM.i686. Si es necesario, puede especificar la versión completamente. Por ej sudo dnf install ibSM-1.2.0-2.fc15.i686.

Algunas bibliotecas tendrán un designador de "época" antes de su nombre; esto se puede omitir (los curiosos pueden leer las notas a continuación).

Notas

Advertencia

Incidentalmente, el problema que enfrenta implica que su base de datos RPM (resp. DPkg / DSelect) está dañada o que la aplicación que está intentando ejecutar no se instaló a través del administrador de paquetes. Si es nuevo en Linux, probablemente desee evitar el uso de software de fuentes distintas de su administrador de paquetes, siempre que sea posible ...

Si no usa "sudo" en su configuración

Tipo

su -c

cada vez que ves sudo, por ejemplo,

su -c dnf install glibc.i686

Sobre el designador de época en los nombres de las bibliotecas

El designador "época" antes del nombre es un artefacto de la forma en que las bibliotecas RPM subyacentes manejan los números de versión; p.ej

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

Aquí, 2:se puede omitir; solo pkcon install libpng.i686o sudo dnf install libpng-1.2.46-1.fc16.i686. (Esto implica vagamente algo como: en algún momento, el número de versión del libpngpaquete se revirtió y la "época" tuvo que incrementarse para asegurarse de que la versión más nueva se consideraría "más nueva" durante las actualizaciones. O sucedió algo similar. .)


Actualizado para aclarar y cubrir las diversas opciones del administrador de paquetes de forma más completa (marzo de 2016)

BRPocock
fuente
iv instalado que ahora Im consiguiendo libpam.so.0: fichero objeto compartido no se puede abrir
c11ada
77
Si su aplicación no enumera sus bibliotecas requeridas, deberá buscarlas e instalarlas usted mismo; si tienes suerte, estarán disponibles a través de ñam. Puede usar "ldd (binario)" para enumerar bibliotecas. Para cada biblioteca que aparece en la lista, eso no da una lectura como "/lib/ld-linux.so.2 (0x4f8d9000)" o "libc.so.6 => /lib/libc.so.6 (0x4f8fa000) ", intente: sudo yum proporciona * / lib / libWHATEVER.so - para encontrar los nombres de los paquetes, y luego sudo yum instala PACKAGE.i686 para instalarlo. (Asegúrate de tomar el i386 o i686, no x86_64, ya que se instalaría de forma predeterminada en tu sistema)
BRPocock
Esta respuesta es una bendición cuando tiene un software de 32 bits que debe migrar a su sistema de 64 bits.
froggythefrog
Esto fue muy útil para instalar el Jre 1.7 de Oracle en Fedora 20. Además de glibc.i686, tuve que instalar libgcc.i686.
John Schmitt
17

Acabo de encontrar el mismo problema en una máquina CentOS 6.4 de 64 bits recién instalada. Un solo comando yum arreglará esto más el 99% de problemas similares:

yum groupinstall "Bibliotecas de compatibilidad"

Prefije esto con 'sudo' o ejecútelo como root, lo que sea mejor para usted.

Phil Edwards
fuente
14

En general, cuando recibe un error como este, simplemente haga

yum provides ld-linux.so.2

entonces verás algo como:

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

y luego simplemente ejecuta lo siguiente como escribió BRPocock (en caso de que se preguntara cuál era la lógica ...):

yum install glibc.i686
Moe Singh
fuente
3

Tratar

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

Espero que esto se aclare.

The Bumpaster
fuente
0

Solo quería agregar un comentario en BRPocock, pero no tengo suficientes privilegios.

Así que mi contribución fue para todos los que intentan instalar IBM Integration Toolkit desde el paquete de Integration Bus de IBM.

Cuando intenta ejecutar el comando "Installation Manager" desde la carpeta / Integration_Toolkit / IM_Linux (el archivo a ejecutar es "install"), se muestra el error en esta publicación.

Encontrará más instrucciones para solucionar este problema en la página web de esta IBM: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

Espero que esto ayude a cualquiera que intente instalarlo.

mmarquezvacas
fuente
0

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

Nithin
fuente
0

Agregaría que para Debian necesita al menos un compilador en el sistema (de acuerdo con las bibliotecas Debian Stretch y Jessie de 32 bits ).

Lo instalé apt-get install -y gcc-multilibpara ejecutar un archivo ejecutable de 32 bits en mi contenedor docker basado en debian: jessie.

Vital
fuente
incluya las partes esenciales del enlace en su respuesta
Ibo
0

También puede instalar OpenJDK 32-bit ( .i686) en su lugar. Según mi prueba, se instalará y funciona sin problemas.

sudo yum install java-1.8.0-openjdk.i686

Nota:

El paquete java-1.8.0-openjdk contiene solo el Java Runtime Environment . Si desea desarrollar programas Java, instale el paquete java-1.8.0-openjdk-devel .

Ver aquí para más detalles.

Mir-Ismaili
fuente