64-бітний поганий перекладач ELF CentOS


183

Щойно я встановив 64-бітну версію CentOS 6, я намагаюся встановити 32-бітну програму на 64-бітній машині і отримав цю помилку:

/lib/ld-linux.so.2: неправильний перекладач ELF: Немає такого файлу чи каталогу

Я новачок у Linux. Як вирішити це?

Відповіді:


355

Ви маєте 64-бітну систему і не встановлено підтримку 32-бітної бібліотеки.

Щоб встановити (базову) підтримку 32-бітних виконуваних файлів

(якщо ви не використовуєте судо в налаштуваннях, прочитайте примітку нижче)

Більшість настільних систем Linux в сім'ї Fedora / Red Hat:

 pkcon install glibc.i686

Можливо, деякі настільні системи Debian / Ubuntu ?:

pkcon install ia32-libs

Fedora або новіший Red Hat, CentOS:

 sudo dnf install glibc.i686

Старіший RHEL, CentOS:

   sudo yum install glibc.i686

Навіть старший RHEL, CentOS:

  sudo yum install glibc.i386

Debian або Ubuntu:

   sudo apt-get install ia32-libs

має захопити вам (першу, основну) бібліотеку, яка вам потрібна.

Коли ви це отримаєте, вам, ймовірно, знадобляться вкладки для підтримки

Кожен, хто потребує встановлення glibc.i686або glibc.i386, ймовірно, також наштовхнеться на інші бібліотечні залежності. Для ідентифікації пакету, що надає довільну бібліотеку, ви можете використовувати

 ldd /usr/bin/YOURAPPHERE

якщо ви не впевнені, що це в /usr/binвас, ви також можете перейти назад

 ldd $(which YOURAPPNAME)

Вихід буде виглядати приблизно так:

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

Перевірте відсутні бібліотеки (наприклад, libSM.so.6у наведеному вище висновку), і для кожної вам потрібно знайти пакет, який її надає.

Команди для пошуку пакету на родину розповсюдження

Fedora / Red Hat Enterprise / CentOS:

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

або на старих RHEL / CentOS:

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

або на Debian / Ubuntu:

спочатку встановіть та завантажте базу даних для apt-file

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

потім пошук за допомогою

 apt-file find libSM.so.6

Зверніть увагу на шлях префікса /usr/libу (звичайному) випадку; рідко деякі бібліотеки все ще живуть /libз історичних причин ... У типових 64-бітних системах живуть 32-бітні бібліотеки /usr/libта 64-бітні бібліотеки /usr/lib64.

(Debian / Ubuntu по-різному організовують бібліотеки з багатьма архітектурами.)

Встановлення пакетів для відсутніх бібліотек

Вищенаведене має дати назву пакета, наприклад:

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

У цьому прикладі ім'я пакету є, libSMа назва 32-бітної версії пакетуlibSM.i686 .

Потім ви можете встановити пакет, щоб захопити необхідну бібліотеку за pkconдопомогою GUI або, sudo dnf/yum/apt-getякщо потрібно,…. Напр pkcon install libSM.i686. При необхідності ви можете вказати версію повністю. Напр sudo dnf install ibSM-1.2.0-2.fc15.i686.

Деякі бібліотеки матимуть позначення "епохи" перед своїм ім'ям; це можна опустити (цікавий може прочитати примітки нижче).

Примітки

Увага

Випадково проблема, з якою ви стикаєтеся, або означає, що ваша база RPM (відповідно DPkg / DSelect) пошкоджена, або що програма, яку ви намагаєтеся запустити, не була встановлена ​​через менеджер пакунків. Якщо ви новачок у Linux, ви, ймовірно, хочете уникати використання програмного забезпечення з інших джерел, ніж ваш менеджер пакунків, коли це можливо ...

Якщо ви не використовуєте "sudo" у своєму налаштуванні

Тип

su -c

кожного разу, коли ви бачите sudo, наприклад,

su -c dnf install glibc.i686

Про позначення епохи у назвах бібліотек

Позначення "епоха" перед назвою є артефактом того, як базові бібліотеки RPM обробляють номери версій; напр

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

Тут 2:можна опустити; просто pkcon install libpng.i686або sudo dnf install libpng-1.2.46-1.fc16.i686. (Це неясно означає щось на кшталт: у якийсь момент номер версії libpngпакету відкотився назад, і "епоху" потрібно було збільшити, щоб переконатися, що новіша версія буде вважатися "новішою" під час оновлень. Або трапилось щось подібне. Двічі .)


Оновлено для уточнення та більш повного висвітлення різних варіантів менеджера пакунків (березень 2016 р.)


iv встановлено, що зараз я отримую libpam.so.0: не вдається відкрити спільний файл об'єкта
c11ada

7
Якщо у вашому додатку не вказані необхідні бібліотеки, вам доведеться їх самостійно відшукати та встановити; якщо вам пощастить, вони будуть доступні через yum. Ви можете використовувати "ldd (binary)" для переліку бібліотек. Для кожної бібліотеки, що перерахована, вона не дає зчитування на зразок "/lib/ld-linux.so.2 (0x4f8d9000)" або "libc.so.6 => /lib/libc.so.6 (0x4f8fa000) ", спробуйте: sudo yum забезпечує * / lib / libWHATEVER.so - щоб знайти ім'я (-и) пакета, а потім встановити sudo yum PACKAGE.i686 для його встановлення. (Обов’язково захопіть i386 або i686, а не x86_64, як встановлено за замовчуванням у вашій системі)
BRPocock

Ця відповідь є набором даних, коли у вас є 32-бітове програмне забезпечення, яке потрібно перенести на вашу 64-бітну систему.
froggythefrog

Це було дуже корисно для встановлення jre 1.7 Oracle на Fedora 20. Крім glibc.i686, мені довелося встановити libgcc.i686.
Джон Шмітт

17

Щойно натрапив на цю ж проблему на щойно встановленому 64-розрядному комп'ютері CentOS 6.4. Одна команда yum виправить це плюс 99% подібних проблем:

yum groupinstall "Бібліотеки сумісності"

Будьте приставкою цього "sudo" або запустіть як root, залежно від того, що краще для вас підійде.


14

Загалом, коли ви отримуєте подібну помилку, просто робіть

yum provides ld-linux.so.2

то ви побачите щось на кшталт:

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

а потім просто запустіть таке, як написав BRPocock (на випадок, коли вам було цікаво, яка логіка ...):

yum install glibc.i686

3

Спробуйте

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

Сподіваюсь, це зникне.


0

Просто хотів додати коментар у BRPocock, але я не маю достатніх привілеїв.

Тож мій внесок був для всіх, хто намагався встановити інструментарій IBM Integration Toolkit з пакета IBM Integration Bus.

Коли ви намагаєтеся запустити команду "Installation Manager" з папки / Integration_Toolkit / IM_Linux (файл, який потрібно запустити, "встановити"), ви отримаєте помилку, показану в цьому дописі.

Подальші інструкції щодо вирішення цієї проблеми ви знайдете на веб-сторінці IBM: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

Сподіваюся, це допомагає тим, хто намагається встановити це.


0

sudo yum встановити fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdc ++. so.6


0

Я б додав, що для Debian потрібен принаймні один компілятор у системі (згідно 32-бітових бібліотек Debian Stretch та Jessie ).

Я встановив apt-get install -y gcc-multilibдля того, щоб запустити 32-розрядний виконуваний файл у своєму контейнері docker на основі debian: jessie.


будь ласка, включіть у свою відповідь основні частини посилання
Ibo

0

Ви також можете встановити 32-розрядний ( .i686) OpenJDK ( ). За моїм тестом, він буде встановлений і працює без проблем.

sudo yum install java-1.8.0-openjdk.i686

Примітка:

Пакет java-1.8.0-openjdk містить лише середовище Java Runtime Environment . Якщо ви хочете розробити програми Java, то встановіть пакет java-1.8.0-openjdk-devel .

Дивіться тут для більш детальної інформації.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.