web-dev-qa-db-fra.com

CentOS 64 bit mauvais interprète

Je viens d'installer la version CentOS 6 64 bits, j'essaie d'installer une application 32 bits sur un ordinateur 64 bits et j'ai l'erreur suivante:

/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?

168
c11ada

Vous êtes sur un système 64 bits et aucune prise en charge de bibliothèque 32 bits n'est installée.

Pour installer (base) la prise en charge 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 des systèmes de bureau Debian/Ubuntu ?:

pkcon install ia32-libs

Fedora ou plus récent Red Hat, CentOS:

 Sudo dnf install glibc.i686

RHEL ancien, CentOS:

   Sudo yum install glibc.i686

Encore plus vieux 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

Quiconque ayant besoin d'installer glibc.i686 ou glibc.i386 se heurtera probablement à d'autres dépendances de la bibliothèque. Pour identifier un paquet fournissant une bibliothèque arbitraire, vous pouvez utiliser

 ldd /usr/bin/YOURAPPHERE

si vous n'êtes pas sûr qu'il soit en /usr/bin, vous pouvez également 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

Recherchez les bibliothèques manquantes (par exemple, libSM.so.6 dans la sortie ci-dessus) et pour chacune d’elles, vous devez rechercher le paquet qui les fournit.

Commandes pour trouver le paquet 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 chercher avec

 apt-file find libSM.so.6

Notez le chemin de préfixe /usr/lib dans le cas (habituel); il est rare que certaines bibliothèques conservent toujours /lib pour des raisons historiques… Sur les systèmes 64 bits classiques, les bibliothèques 32 bits résident dans /usr/lib et les bibliothèques 64 bits, dans /usr/lib64.

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

Installation de packages pour les bibliothèques manquantes

Ce qui précède devrait vous donner un nom de paquet, 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 libSM et le nom de la version 32 bits du package est libSM.i686.

Vous pouvez ensuite installer le package pour récupérer la bibliothèque requise en utilisant pkcon dans une interface graphique, ou Sudo dnf/yum/apt-get selon le cas…. E.g pkcon install libSM.i686. Si nécessaire, vous pouvez spécifier complètement la version. E.g Sudo dnf install ibSM-1.2.0-2.fc15.i686.

Certaines bibliothèques auront un identifiant «Epoch» avant leur nom; ceci peut être omis (les curieux peuvent lire les notes ci-dessous).

Remarques

Attention

Incidemment, le problème que vous rencontrez implique soit que votre base de données RPM (ou 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 débutez dans 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 du désignateur d'époque dans les noms de bibliothèque

Le désignateur «Epoch» avant le nom est un artefact de la manière dont les bibliothèques RPM sous-jacentes traitent 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.i686 ou Sudo dnf install libpng-1.2.46-1.fc16.i686. (Cela implique vaguement quelque chose du genre: à un moment donné, le numéro de version du paquet libpng est passé à l’arrière et l’époque a dû être incrémentée pour que la version la plus récente soit considérée comme «plus récente» lors des mises à jour. Ou quelque chose de similaire. Deux fois.)


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

337
BRPocock

Je viens de rencontrer le même problème sur une machine CentOS 6.4 64 bits 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-le en tant que root, selon ce qui vous convient le mieux.

17
Phil Edwards

En général, quand vous obtenez une erreur comme celle-ci, faites juste

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 lancez ce qui suit, comme l’a écrit BRPocock (au cas où vous vous demanderiez quelle était la logique ...):

yum install glibc.i686
11
Moe Singh

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 ça s'efface.

3
The Bumpaster

Vous devez installer fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc +

0
Nithin

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

Ma contribution était donc destinée à tous ceux qui essayaient d'installer IBM Integration Toolkit à partir du bundle IBM Integration Bus.

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 la page Web d'IBM suivante: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

J'espère que cela aidera tous ceux qui essaient d'installer ça.

0
mmarquezvacas

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

J'ai installé apt-get install -y gcc-multilib afin de pouvoir exécuter un fichier exécutable 32 bits dans mon conteneur Docker basé sur debian: jessie.

0
Vitaliy

Vous pouvez également installer OpenJDK 32 bits (.i686) à la place. Selon mon test, il sera installé et fonctionne sans problèmes.

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.

0
Mir-Ismaili