Interpréteur ELF incorrect de CentOS 64 bits

183

Je viens d'installer la version CentOS 6 64 bits, j'essaie d'installer une application 32 bits sur une machine 64 bits et j'ai cette erreur:

/lib/ld-linux.so.2: interpréteur ELF incorrect: aucun fichier ou répertoire de ce type

Je suis nouveau sur Linux. Comment résoudre ça?

c11ada
la source

Réponses:

356

Vous êtes sur un système 64 bits et la prise en charge des bibliothèques 32 bits n'est pas installée.

Pour installer la prise en charge (de base) des exécutables 32 bits

(si vous n'utilisez pas sudo dans votre configuration, lisez la note ci-dessous)

La plupart des systèmes Linux de bureau de la famille Fedora / Red Hat:

 pkcon install glibc.i686

Peut-être certains systèmes Debian / Ubuntu de bureau?:

pkcon install ia32-libs

Fedora ou plus récent Red Hat, CentOS:

 sudo dnf install glibc.i686

Ancien RHEL, CentOS:

   sudo yum install glibc.i686

Encore plus ancien RHEL, CentOS:

  sudo yum install glibc.i386

Debian ou Ubuntu:

   sudo apt-get install ia32-libs

devrait vous saisir la (première, principale) bibliothèque dont vous avez besoin.

Une fois que vous avez cela, vous aurez probablement besoin de bibliothèques de support

Toute personne ayant besoin d'installer glibc.i686ou rencontrera glibc.i386probablement d'autres dépendances de bibliothèque, ainsi. Pour identifier un package fournissant une bibliothèque arbitraire, vous pouvez utiliser

 ldd /usr/bin/YOURAPPHERE

si vous n'êtes pas sûr que c'est dedans, /usr/binvous pouvez aussi vous rabattre sur

 ldd $(which YOURAPPNAME)

La sortie ressemblera à ceci:

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

Vérifiez les bibliothèques manquantes (par exemple libSM.so.6dans la sortie ci-dessus), et pour chacune d'elles, vous devez trouver le paquet qui la fournit.

Commandes pour trouver le package par famille de distribution

Fedora / Red Hat Enterprise / CentOS:

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

ou, sur les anciens RHEL / CentOS:

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

ou, sur Debian / Ubuntu:

tout d'abord, installez et téléchargez la base de données pour apt-file

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

puis recherchez avec

 apt-file find libSM.so.6

Notez le chemin du préfixe /usr/libdans le cas (habituel); rarement, certaines bibliothèques vivent encore sous /libpour des raisons historiques… Sur les systèmes 64 bits typiques, les bibliothèques 32 bits vivent /usr/libet les bibliothèques 64 bits vivent /usr/lib64.

(Debian / Ubuntu organisent différemment les bibliothèques multi-architectures.)

Installation de packages pour les bibliothèques manquantes

Ce qui précède devrait vous donner un nom de package, par exemple:

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

Dans cet exemple, le nom du package est libSMet le nom de la version 32 bits du package estlibSM.i686 .

Vous pouvez ensuite installer le package pour récupérer la bibliothèque requise en utilisant pkconune interface graphique, ou sudo dnf/yum/apt-getselon le cas…. Par ex pkcon install libSM.i686. Si nécessaire, vous pouvez spécifier la version entièrement. Par ex sudo dnf install ibSM-1.2.0-2.fc15.i686.

Certaines bibliothèques auront un désignateur «d'époque» avant leur nom; cela peut être omis (les curieux peuvent lire les notes ci-dessous).

Remarques

Attention

Incidemment, le problème auquel vous êtes confronté implique soit que votre base de données RPM (resp. DPkg / DSelect) est corrompue, soit que l'application que vous essayez d'exécuter n'a pas été installée via le gestionnaire de packages. Si vous êtes nouveau sur Linux, vous voudrez probablement éviter d'utiliser des logiciels provenant de sources autres que votre gestionnaire de paquets, dans la mesure du possible ...

Si vous n'utilisez pas "sudo" dans votre configuration

Type

su -c

chaque fois que vous voyez sudo, par exemple,

su -c dnf install glibc.i686

À propos de l'indicateur d'époque dans les noms de bibliothèque

L'indicateur «d'époque» avant le nom est un artefact de la façon dont les bibliothèques RPM sous-jacentes gèrent les numéros de version; par exemple

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

Ici, le 2:peut être omis; juste pkcon install libpng.i686ou sudo dnf install libpng-1.2.46-1.fc16.i686. (Cela implique vaguement quelque chose comme: à un moment donné, le numéro de version du libpngpaquet a été annulé et l '«époque» a dû être incrémentée pour s'assurer que la version la plus récente serait considérée comme «plus récente» lors des mises à jour. Ou quelque chose de similaire s'est produit. Deux fois .)


Mise à jour pour clarifier et couvrir plus complètement les différentes options du gestionnaire de packages (mars 2016)

BRPocock
la source
iv installé que maintenant je reçois libpam.so.0: impossible d'ouvrir le fichier d'objet partagé
c11ada
7
Si votre application ne répertorie pas ses bibliothèques requises, vous devrez les rechercher et les installer vous-même; si vous avez de la chance, ils seront disponibles via yum. Vous pouvez utiliser "ldd (binaire)" pour lister les bibliothèques. Pour chaque bibliothèque répertoriée, cela ne donne pas de lecture comme "/lib/ld-linux.so.2 (0x4f8d9000)" ou "libc.so.6 => /lib/libc.so.6 (0x4f8fa000) ", essayez: sudo yum fournit * / lib / libWHATEVER.so - pour trouver le (s) nom (s) de paquet, puis sudo yum install PACKAGE.i686 pour l'installer. (Assurez-vous de récupérer le i386 ou le i686, pas x86_64 comme il serait installé par défaut sur votre système)
BRPocock
Cette réponse est une aubaine lorsque vous disposez d'un logiciel 32 bits que vous devez migrer vers votre système 64 bits.
froggythefrog
Cela a été très utile pour installer jre 1.7 d'Oracle sur Fedora 20. En plus de glibc.i686, j'ai dû installer libgcc.i686.
John Schmitt
17

Je viens de rencontrer le même problème sur une machine 64 bits CentOS 6.4 fraîchement installée. Une seule commande yum résoudra ce problème plus 99% des problèmes similaires:

yum groupinstall "Bibliothèques de compatibilité"

Préfixez-le avec «sudo» ou exécutez en tant que root, selon ce qui vous convient le mieux.

Phil Edwards
la source
14

En général, lorsque vous obtenez une erreur comme celle-ci, faites simplement

yum provides ld-linux.so.2

alors vous verrez quelque chose comme:

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

et ensuite vous exécutez simplement ce qui suit comme BRPocock l'a écrit (au cas où vous vous demanderiez quelle était la logique ...):

yum install glibc.i686
Moe Singh
la source
3

Essayer

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

J'espère que cela disparaîtra.

Le Bumpaster
la source
0

Je voulais juste ajouter un commentaire dans BRPocock, mais je n'ai pas les privilèges suffisants.

Ma contribution s'adressait donc à tous ceux qui essayaient d'installer IBM Integration Toolkit à partir du bundle Integration Bus d'IBM.

Lorsque vous essayez d'exécuter la commande "Installation Manager" à partir du dossier / Integration_Toolkit / IM_Linux (le fichier à exécuter est "install"), vous obtenez l'erreur indiquée dans cet article.

Vous trouverez d'autres instructions pour résoudre ce problème dans cette page Web IBM: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

J'espère que cela aidera quiconque essaiera d'installer cela.

mmarquezvacas
la source
0

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

Nithin
la source
0

J'ajouterais que pour Debian vous avez besoin d'au moins un compilateur dans le système (selon les bibliothèques 32 bits Debian Stretch et Jessie ).

J'ai installé apt-get install -y gcc-multilibafin d'exécuter un fichier exécutable 32 bits dans mon conteneur docker basé sur debian: jessie.

Vitalité
la source
veuillez inclure les parties essentielles du lien dans votre réponse
Ibo
0

Vous pouvez également installer OpenJDK 32 bits ( .i686) à la place. D'après mon test, il sera installé et fonctionnera sans problème.

sudo yum install java-1.8.0-openjdk.i686

Remarque:

Le package java-1.8.0-openjdk contient uniquement l'environnement d'exécution Java . Si vous souhaitez développer des programmes Java, installez le package java-1.8.0-openjdk-devel .

Voir ici pour plus de détails.

Mir-Ismaili
la source