CentOS 64-Bit-ELF-Interpreter

183

Ich habe gerade die 64-Bit-Version von CentOS 6 installiert. Ich versuche, eine 32-Bit-Anwendung auf einem 64-Bit-Computer zu installieren, und habe folgende Fehlermeldung erhalten:

/lib/ld-linux.so.2: fehlerhafter ELF-Interpreter: Keine solche Datei oder kein solches Verzeichnis

Ich bin neu in Linux. Wie löse ich das?

c11ada
quelle

Antworten:

354

Sie befinden sich auf einem 64-Bit-System und haben keine 32-Bit-Bibliotheksunterstützung installiert.

So installieren Sie die (Basis-) Unterstützung für 32-Bit-ausführbare Dateien

(Wenn Sie in Ihrem Setup kein Sudo verwenden, lesen Sie den folgenden Hinweis.)

Die meisten Desktop-Linux-Systeme der Fedora / Red Hat-Familie:

 pkcon install glibc.i686

Möglicherweise einige Desktop-Debian / Ubuntu-Systeme?:

pkcon install ia32-libs

Fedora oder neuer Red Hat, CentOS:

 sudo dnf install glibc.i686

Älteres RHEL, CentOS:

   sudo yum install glibc.i686

Noch älter RHEL, CentOS:

  sudo yum install glibc.i386

Debian oder Ubuntu:

   sudo apt-get install ia32-libs

sollte dir die (erste, Haupt-) Bibliothek besorgen, die du brauchst.

Sobald Sie das haben, werden Sie wahrscheinlich Support-Bibliotheken benötigen

Jeder, der eine Installation benötigt glibc.i686oder glibc.i386wahrscheinlich auch auf andere Bibliotheksabhängigkeiten stößt. Sie können ein Paket identifizieren, das eine beliebige Bibliothek bereitstellt

 ldd /usr/bin/YOURAPPHERE

Wenn Sie nicht sicher sind, ob es drin ist /usr/bin, können Sie auch darauf zurückgreifen

 ldd $(which YOURAPPNAME)

Die Ausgabe sieht folgendermaßen aus:

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

Suchen Sie nach fehlenden Bibliotheken (z. B. libSM.so.6in der obigen Ausgabe), und suchen Sie für jede Bibliothek das Paket, das sie bereitstellt.

Befehle zum Finden des Pakets pro Distributionsfamilie

Fedora / Red Hat Enterprise / CentOS:

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

oder bei älteren RHEL / CentOS:

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

oder auf Debian / Ubuntu:

Installieren Sie zunächst die Datenbank für und laden Sie sie herunter apt-file

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

dann suchen mit

 apt-file find libSM.so.6

Beachten Sie den Präfixpfad /usr/libim (normalen) Fall; In seltenen Fällen leben einige Bibliotheken /libaus historischen Gründen noch unter … Auf typischen 64-Bit-Systemen leben 32-Bit-Bibliotheken /usr/libund 64-Bit-Bibliotheken /usr/lib64.

(Debian / Ubuntu organisieren Bibliotheken mit mehreren Architekturen unterschiedlich.)

Installieren von Paketen für fehlende Bibliotheken

Das Obige sollte Ihnen einen Paketnamen geben, zB:

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

In diesem Beispiel lautet der Name des Pakets libSMund der Name der 32-Bit-Version des PaketslibSM.i686 .

Sie können das Paket dann installieren, um die erforderliche Bibliothek mithilfe pkconeiner GUI oder sudo dnf/yum/apt-getnach Bedarf abzurufen. ZB pkcon install libSM.i686. Bei Bedarf können Sie die Version vollständig angeben. ZB sudo dnf install ibSM-1.2.0-2.fc15.i686.

Einige Bibliotheken haben vor ihrem Namen einen Epochenbezeichner. Dies kann weggelassen werden (Neugierige können die folgenden Hinweise lesen).

Anmerkungen

Warnung

Im Übrigen impliziert das Problem, mit dem Sie konfrontiert sind, entweder, dass Ihre RPM-Datenbank (bzw. DPkg / DSelect) beschädigt ist oder dass die Anwendung, die Sie ausführen möchten, nicht über den Paketmanager installiert wurde. Wenn Sie Linux noch nicht kennen, möchten Sie wahrscheinlich nach Möglichkeit die Verwendung von Software aus anderen Quellen als Ihrem Paketmanager vermeiden ...

Wenn Sie "sudo" nicht in Ihrem Setup verwenden

Art

su -c

jedes Mal sudo, wenn Sie sehen , z.

su -c dnf install glibc.i686

Über den Epochenbezeichner in Bibliotheksnamen

Der Bezeichner "Epoche" vor dem Namen ist ein Artefakt der Art und Weise, wie die zugrunde liegenden RPM-Bibliotheken mit Versionsnummern umgehen. z.B

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

Hier 2:kann das weggelassen werden; nur pkcon install libpng.i686oder sudo dnf install libpng-1.2.46-1.fc16.i686. (Dies impliziert vage Folgendes: Irgendwann wurde die Versionsnummer des libpngPakets rückwärts gerollt, und die „Epoche“ musste erhöht werden, um sicherzustellen, dass die neuere Version bei Aktualisierungen als „neuer“ betrachtet wird. Oder etwas Ähnliches geschah. Zweimal .)


Aktualisiert , um die verschiedenen Optionen des Paketmanagers klarer zu verdeutlichen und abzudecken (März 2016)

BRPocock
quelle
Ich habe installiert, dass ich jetzt libpam.so.0 bekomme: kann nicht freigegebene Objektdatei öffnen
c11ada
7
Wenn Ihre App die erforderlichen Bibliotheken nicht auflistet, müssen Sie sie suchen und selbst installieren. Wenn Sie Glück haben, sind sie über yum erhältlich. Sie können "ldd (binär)" verwenden, um Bibliotheken aufzulisten. Für jede aufgelistete Bibliothek wird keine Anzeige wie "/lib/ld-linux.so.2 (0x4f8d9000)" oder "libc.so.6 => /lib/libc.so.6 (0x4f8fa000) angezeigt. ", versuchen Sie: sudo yum stellt * / lib / libWHATEVER.so bereit, um die Paketnamen zu finden, und installiert dann sudo yum PACKAGE.i686, um es zu installieren. (Stellen Sie sicher, dass Sie den i386 oder i686 greifen, nicht x86_64, wie er standardmäßig auf Ihrem System installiert wird.)
BRPocock
Diese Antwort ist ein Glücksfall, wenn Sie über 32-Bit-Software verfügen, die Sie auf Ihr 64-Bit-System migrieren müssen.
Froggythefrog
Dies war sehr hilfreich für die Installation von Oracle jre 1.7 unter Fedora 20. Zusätzlich zu glibc.i686 musste ich libgcc.i686 installieren.
John Schmitt
17

Ich bin gerade auf das gleiche Problem auf einem frisch installierten CentOS 6.4 64-Bit-Computer gestoßen. Ein einziger yum-Befehl behebt dieses Problem zu 99% ähnlicher Probleme:

yum groupinstall "Kompatibilitätsbibliotheken"

Stellen Sie dies entweder mit 'sudo' voran oder führen Sie es als root aus, je nachdem, was für Sie am besten geeignet ist.

Phil Edwards
quelle
14

Wenn Sie einen solchen Fehler erhalten, tun Sie dies im Allgemeinen einfach

yum provides ld-linux.so.2

dann siehst du so etwas wie:

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

und dann führen Sie einfach Folgendes aus, wie BRPocock geschrieben hat (falls Sie sich fragen, was die Logik war ...):

yum install glibc.i686
Moe Singh
quelle
3

Versuchen

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

Hoffe das klärt sich auf.

Der Bumpaster
quelle
0

Ich wollte nur einen Kommentar in BRPocock hinzufügen, aber ich habe nicht die ausreichenden Berechtigungen.

Mein Beitrag war also für alle, die versuchen, IBM Integration Toolkit aus dem IBM Integration Bus-Bundle zu installieren.

Wenn Sie versuchen, den Befehl "Installation Manager" aus dem Ordner / Integration_Toolkit / IM_Linux auszuführen (die auszuführende Datei lautet "install"), wird der in diesem Beitrag angezeigte Fehler angezeigt.

Weitere Anweisungen zur Behebung dieses Problems finden Sie auf der IBM Webseite: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

Hoffe, das hilft jedem, der versucht, das zu installieren.

mmarquezvacas
quelle
0

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

Nithin
quelle
0

Ich würde hinzufügen, dass Sie für Debian mindestens einen Compiler im System benötigen (gemäß den 32-Bit-Bibliotheken von Debian Stretch und Jessie ).

Ich habe installiert, apt-get install -y gcc-multilibum eine ausführbare 32-Bit-Datei in meinem Docker-Container basierend auf debian: jessie auszuführen.

Vitaliy
quelle
Bitte fügen Sie die wesentlichen Teile des Links in Ihre Antwort
Ibo
0

Sie können .i686stattdessen auch OpenJDK 32-bit ( ) installieren . Nach meinem Test wird es installiert und funktioniert ohne Probleme.

sudo yum install java-1.8.0-openjdk.i686

Hinweis:

Das Paket java-1.8.0-openjdk enthält nur die Java-Laufzeitumgebung . Wenn Sie Java-Programme entwickeln möchten, installieren Sie das Paket java-1.8.0-openjdk-devel .

Sehen Sie hier für weitere Details.

Mir-Ismaili
quelle