64-bitowy zły interpreter ELF CentOS

183

Właśnie zainstalowałem 64-bitową wersję CentOS 6, próbuję zainstalować aplikację 32-bitową na komputerze 64-bitowym i pojawia się ten błąd:

/lib/ld-linux.so.2: zły interpreter ELF: brak takiego pliku lub katalogu

Jestem nowy w systemie Linux. Jak to rozwiązać?

c11ada
źródło

Odpowiedzi:

355

Używasz 64-bitowego systemu i nie masz zainstalowanej obsługi bibliotek 32-bitowych.

Aby zainstalować (podstawową) obsługę 32-bitowych plików wykonywalnych

(jeśli nie używasz sudo w konfiguracji przeczytaj notatkę poniżej)

Większość stacjonarnych systemów Linux z rodziny Fedora / Red Hat:

 pkcon install glibc.i686

Być może niektóre stacjonarne systemy Debian / Ubuntu ?:

pkcon install ia32-libs

Fedora lub nowsza wersja Red Hat, CentOS:

 sudo dnf install glibc.i686

Starsze RHEL, CentOS:

   sudo yum install glibc.i686

Nawet starszy RHEL, CentOS:

  sudo yum install glibc.i386

Debian lub Ubuntu:

   sudo apt-get install ia32-libs

powinien pobrać (pierwszą, główną) bibliotekę, której potrzebujesz.

Gdy to zrobisz, prawdopodobnie będziesz potrzebować bibliotek wsparcia

Każdy, kto musi zainstalować glibc.i686lub glibc.i386prawdopodobnie napotka także inne zależności bibliotek. Aby zidentyfikować pakiet udostępniający dowolną bibliotekę, możesz użyć

 ldd /usr/bin/YOURAPPHERE

jeśli nie jesteś pewien, czy jest w /usr/binśrodku, możesz również polegać

 ldd $(which YOURAPPNAME)

Dane wyjściowe będą wyglądać następująco:

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

Sprawdź brakujące biblioteki (np. libSM.so.6W powyższych wynikach) i dla każdej z nich musisz znaleźć pakiet, który je udostępnia.

Polecenia do znalezienia pakietu według rodziny dystrybucji

Fedora / Red Hat Enterprise / CentOS:

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

lub na starszych RHEL / CentOS:

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

lub na Debian / Ubuntu:

najpierw zainstaluj i pobierz bazę danych dla apt-file

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

następnie wyszukaj za pomocą

 apt-file find libSM.so.6

Zwróć uwagę na ścieżkę prefiksu /usr/libw (zwykłym) przypadku; rzadko niektóre biblioteki nadal żyją /libz przyczyn historycznych… W typowych systemach /usr/lib64-bitowych biblioteki 32-bitowe są włączone, a biblioteki 64-bitowe /usr/lib64.

(Debian / Ubuntu inaczej organizują biblioteki wielu architektur).

Instalowanie pakietów dla brakujących bibliotek

Powyższe powinno dać nazwę pakietu, np .:

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

W tym przykładzie nazwa pakietu jest libSMi nazwa wersji 32bit pakietu jestlibSM.i686 .

Następnie możesz zainstalować pakiet, aby pobrać wymaganą bibliotekę za pkconpomocą graficznego interfejsu użytkownika lub sudo dnf/yum/apt-getodpowiednio…. Np pkcon install libSM.i686. W razie potrzeby możesz w pełni określić wersję. Np sudo dnf install ibSM-1.2.0-2.fc15.i686.

Niektóre biblioteki będą miały oznaczenie „epoki” przed ich nazwą; można to pominąć (ciekawi mogą przeczytać poniższe uwagi).

Notatki

Ostrzeżenie

Nawiasem mówiąc, napotkany problem albo sugeruje, że baza danych RPM (odpowiednio DPkg / DSelect) jest uszkodzona lub aplikacja, którą próbujesz uruchomić, nie została zainstalowana za pośrednictwem menedżera pakietów. Jeśli dopiero zaczynasz pracę z Linuksem, prawdopodobnie w miarę możliwości unikniesz używania oprogramowania ze źródeł innych niż menedżer pakietów ...

Jeśli nie używasz „sudo” w swojej konfiguracji

Rodzaj

su -c

za każdym razem, gdy widzisz sudonp.

su -c dnf install glibc.i686

O desygnatorze epoki w nazwach bibliotek

Oznaczenie „epoki” przed nazwą jest artefaktem sposobu, w jaki biblioteki RPM obsługują numery wersji; na przykład

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

Tutaj 2:można pominąć; tylko pkcon install libpng.i686lub sudo dnf install libpng-1.2.46-1.fc16.i686. (Niejasno implikuje to coś takiego: w pewnym momencie numer wersji libpngpakietu został zwinięty do tyłu, a „epoka” musiała zostać zwiększona, aby mieć pewność, że nowsza wersja zostanie uznana za „nowszą” podczas aktualizacji. Lub coś podobnego się zdarzyło. .)


Zaktualizowano w celu wyjaśnienia i pełnego objęcia różnymi opcjami menedżera pakietów (marzec 2016)

BRPocock
źródło
iv zainstalowałem, że teraz otrzymuję libpam.so.0: nie można otworzyć pliku obiektu współdzielonego
c11ada 30.11.11
7
Jeśli Twoja aplikacja nie zawiera wymaganych bibliotek, będziesz musiał je wyłapać i zainstalować samodzielnie. jeśli masz szczęście, będą dostępne przez yum. Aby wyświetlić listę bibliotek, możesz użyć „ldd (binarny)”. Dla każdej wymienionej biblioteki nie daje odczytu takiego jak „/lib/ld-linux.so.2 (0x4f8d9000)” lub „libc.so.6 => /lib/libc.so.6 (0x4f8fa000) ", spróbuj: sudo yum zapewnia * / lib / libWHATEVER.so - aby znaleźć nazwy pakietów, a następnie sudo yum zainstaluj PACKAGE.i686, aby je zainstalować. (Pamiętaj, aby pobrać i386 lub i686, a nie x86_64, ponieważ byłby domyślnie instalowany w systemie)
BRPocock
Ta odpowiedź jest darem niebios, gdy masz oprogramowanie 32-bitowe, które musisz migrować do systemu 64-bitowego.
froggythefrog
Było to bardzo pomocne przy instalacji jre 1.7 Oracle na Fedorze 20. Oprócz glibc.i686 musiałem zainstalować libgcc.i686.
John Schmitt
17

Właśnie natrafiłem na ten sam problem na świeżo zainstalowanym 64-bitowym komputerze CentOS 6.4. Pojedyncze polecenie yum naprawi ten plus 99% podobnych problemów:

yum groupinstall „Biblioteki zgodności”

Albo dodaj przedrostek „sudo”, albo uruchom jako root, w zależności od tego, który najbardziej Ci odpowiada.

Phil Edwards
źródło
14

Ogólnie rzecz biorąc, gdy pojawi się taki błąd, po prostu zrób

yum provides ld-linux.so.2

wtedy zobaczysz coś takiego:

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

a następnie po prostu uruchom następujące polecenia, jak napisał BRPocock (na wypadek, gdybyś zastanawiał się, jaka była logika ...):

yum install glibc.i686
Moe Singh
źródło
3

Próbować

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

Mam nadzieję, że to się wyjaśni.

Zderzak
źródło
0

Chciałem tylko dodać komentarz w BRPocock, ale nie mam wystarczających uprawnień.

Mój wkład był więc dla wszystkich, którzy próbują zainstalować IBM Integration Toolkit z pakietu IBM Integration Bus.

Podczas próby uruchomienia polecenia „Installation Manager” z folderu / Integration_Toolkit / IM_Linux (plik do uruchomienia to „install”), pojawia się błąd pokazany w tym poście.

Dalsze instrukcje dotyczące rozwiązania tego problemu można znaleźć na stronie internetowej IBM: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

Mam nadzieję, że pomoże to każdemu, kto spróbuje to zainstalować.

mmarquezvacas
źródło
0

sudo mniam zainstaluj fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc ++. so.6

Nithin
źródło
0

Dodałbym, że dla Debiana potrzebujesz co najmniej jednego kompilatora w systemie (zgodnie z 32-bitowymi bibliotekami Debian Stretch i Jessie ).

Zainstalowałem apt-get install -y gcc-multilib, aby uruchomić 32-bitowy plik wykonywalny w moim kontenerze dokowanym na podstawie debian: jessie.

Witalij
źródło
w odpowiedzi umieść istotne części linku
Ibo
0

Zamiast tego możesz również zainstalować OpenJDK 32-bit ( .i686). Według mojego testu zostanie on zainstalowany i będzie działał bez problemów.

sudo yum install java-1.8.0-openjdk.i686

Uwaga:

Pakiet java-1.8.0-openjdk zawiera tylko środowisko Java Runtime Environment . Jeśli chcesz tworzyć programy Java, zainstaluj pakiet java-1.8.0-openjdk-devel .

Zobacz tutaj po więcej szczegółów.

Mir-Ismaili
źródło