Interprete ELF difettoso CentOS a 64 bit


183

Ho appena installato la versione a 64 bit di CentOS 6, sto cercando di installare un'applicazione a 32 bit su una macchina a 64 bit e ho riscontrato questo errore:

/lib/ld-linux.so.2: interprete ELF errato: nessun file o directory

Sono nuovo di Linux. Come lo risolvo?

Risposte:


355

Sei su un sistema a 64 bit e non hai il supporto della libreria a 32 bit installato.

Per installare (baseline) il supporto per eseguibili a 32 bit

(se non usi sudo nella tua installazione leggi la nota sotto)

La maggior parte dei sistemi Linux desktop nella famiglia Fedora / Red Hat:

 pkcon install glibc.i686

Forse alcuni sistemi desktop Debian / Ubuntu ?:

pkcon install ia32-libs

Fedora o Red Hat più recente, CentOS:

 sudo dnf install glibc.i686

RHEL precedente, CentOS:

   sudo yum install glibc.i686

Ancora più vecchio RHEL, CentOS:

  sudo yum install glibc.i386

Debian o Ubuntu:

   sudo apt-get install ia32-libs

dovresti prenderti la (prima, principale) libreria di cui hai bisogno.

Una volta che hai quello, probabilmente avrai bisogno delle librerie di supporto

Chiunque abbia bisogno di installare glibc.i686o glibc.i386probabilmente si imbatterà anche in altre dipendenze della libreria. Per identificare un pacchetto che fornisce una libreria arbitraria, è possibile utilizzare

 ldd /usr/bin/YOURAPPHERE

se non sei sicuro che sia dentro /usr/binpuoi anche ripiegare

 ldd $(which YOURAPPNAME)

L'output sarà simile al seguente:

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

Controlla le librerie mancanti (ad es libSM.so.6. Nell'output sopra) e per ognuna devi trovare il pacchetto che lo fornisce.

Comandi per trovare il pacchetto per famiglia di distribuzione

Fedora / Red Hat Enterprise / CentOS:

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

o, su RHEL / CentOS precedenti:

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

oppure, su Debian / Ubuntu:

Innanzitutto, installa e scarica il database per apt-file

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

quindi cerca con

 apt-file find libSM.so.6

Nota il percorso del prefisso /usr/libnel caso (normale); raramente, alcune librerie vivono ancora /libper ragioni storiche ... Sui sistemi tipici a 64 bit, vivono le librerie a 32 bit e le librerie a /usr/lib64 bit /usr/lib64.

(Debian / Ubuntu organizzano le librerie multiarchitettura in modo diverso.)

Installazione di pacchetti per le librerie mancanti

Quanto sopra dovrebbe darti un nome di pacchetto, ad esempio:

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

In questo esempio il nome del pacchetto è libSMe il nome della versione a 32 bit del pacchetto èlibSM.i686 .

È quindi possibile installare il pacchetto per afferrare la libreria richiesta usando pkconin una GUI, o sudo dnf/yum/apt-getcome appropriato…. Es pkcon install libSM.i686. Se necessario, è possibile specificare la versione completamente. Es sudo dnf install ibSM-1.2.0-2.fc15.i686.

Alcune biblioteche avranno un designatore di "epoca" prima del loro nome; questo può essere omesso (i curiosi possono leggere le note in basso).

Appunti

avvertimento

Per inciso, il problema che stai affrontando implica che il tuo database RPM (resp. DPkg / DSelect) è danneggiato o che l'applicazione che stai cercando di eseguire non è stata installata tramite il gestore pacchetti. Se non conosci Linux, probabilmente vorrai evitare di utilizzare software proveniente da fonti diverse dal gestore dei pacchetti, quando possibile ...

Se non usi "sudo" nel tuo set-up

genere

su -c

ogni volta che vedi sudo, ad es.

su -c dnf install glibc.i686

Informazioni sul designatore dell'epoca nei nomi delle librerie

Il designatore "epoca" prima del nome è un artefatto del modo in cui le librerie RPM sottostanti gestiscono i numeri di versione; per esempio

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

Qui, si 2:può omettere; giusto pkcon install libpng.i686o sudo dnf install libpng-1.2.46-1.fc16.i686. (Implica vagamente qualcosa del genere: ad un certo punto, il numero di versione del libpngpacchetto è stato spostato all'indietro e "epoca" ha dovuto essere incrementata per assicurarsi che la versione più recente fosse considerata "più recente" durante gli aggiornamenti. O qualcosa di simile è successo. Due volte .)


Aggiornato per chiarire e coprire le varie opzioni di gestione dei pacchetti in modo più completo (marzo 2016)


iv installato che ora sto ottenendo libpam.so.0: impossibile aprire il file oggetto condiviso
c11ada

7
Se la tua app non elenca le librerie richieste, dovrai cercarle e installarle tu stesso; se sei fortunato, saranno disponibili tramite yum. È possibile utilizzare "ldd (binario)" per elencare le librerie. Per ogni libreria elencata, ciò non fornisce una lettura come "/lib/ld-linux.so.2 (0x4f8d9000)" o "libc.so.6 => /lib/libc.so.6 (0x4f8fa000) ", prova: sudo yum fornisce * / lib / libWHATEVER.so - per trovare i nomi dei pacchetti, quindi sudo yum installa PACKAGE.i686 per installarlo. (Assicurati di afferrare i386 o i686, non x86_64 come verrebbe installato di default sul tuo sistema)
BRPocock

Questa risposta è una manna dal cielo quando hai un software a 32 bit che devi migrare al tuo sistema a 64 bit.
froggythefrog,

Ciò è stato molto utile per l'installazione di Oracle jre 1.7 su Fedora 20. Oltre a glibc.i686, ho dovuto installare libgcc.i686.
John Schmitt,

17

Ho appena riscontrato lo stesso problema su una macchina CentOS 6.4 a 64 bit appena installata. Un singolo comando yum risolverà questo oltre al 99% di problemi simili:

yum groupinstall "Librerie di compatibilità"

Prefisso con 'sudo' o esegui come root, a seconda di quale funziona meglio per te.


14

In generale, quando ricevi un errore del genere, fallo

yum provides ld-linux.so.2

quindi vedrai qualcosa di simile:

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

e poi esegui semplicemente quanto segue come ha scritto BRPocock (nel caso ti stavi chiedendo quale fosse la logica ...):

yum install glibc.i686

3

Provare

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

Spero che questo chiarisca.


0

Volevo solo aggiungere un commento in BRPocock, ma non ho i privilegi sufficienti.

Quindi il mio contributo è stato per tutti coloro che cercavano di installare IBM Integration Toolkit dal pacchetto IBM Integration Bus.

Quando si tenta di eseguire il comando "Installation Manager" dalla cartella / Integration_Toolkit / IM_Linux (il file da eseguire è "installa") si ottiene l'errore mostrato in questo post.

Ulteriori istruzioni per risolvere questo problema sono disponibili nella pagina Web di IBM: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

Spero che questo aiuti a chiunque cerchi di installarlo.


0

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


0

Vorrei aggiungere per Debian è necessario almeno un compilatore nel sistema (secondo le librerie Debian Stretch e Jessie a 32 bit ).

Ho installato apt-get install -y gcc-multilibper eseguire il file eseguibile a 32 bit nel mio contenitore docker basato su debian: jessie.


includi le parti essenziali del link nella tua risposta
Ibo,

0

Puoi anche installare OpenJDK 32-bit ( .i686) invece. Secondo il mio test, verrà installato e funzionerà senza problemi.

sudo yum install java-1.8.0-openjdk.i686

Nota:

Il pacchetto java-1.8.0-openjdk contiene solo Java Runtime Environment . Se si desidera sviluppare programmi Java, installare il pacchetto java-1.8.0-openjdk-devel .

Vedi qui per maggiori dettagli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.