CentOS 64 бит плохой ELF интерпретатор

183

Я только что установил CentOS 6 64-битную версию, я пытаюсь установить 32-битное приложение на 64-битной машине и получил эту ошибку:

/lib/ld-linux.so.2: плохой ELF-интерпретатор: нет такого файла или каталога

Я новичок в Linux. Как мне решить это?

c11ada
источник

Ответы:

355

Вы работаете в 64-битной системе, и у вас не установлена ​​поддержка 32-битной библиотеки.

Установить (базовую) поддержку 32-битных исполняемых файлов

(если вы не используете sudo в вашей настройке, прочтите примечание ниже)

Большинство настольных 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графический интерфейс или, 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 г.)

BRPocock
источник
Я установил, что теперь я получаю libpam.so.0: не могу открыть общий объектный файл
c11ada
7
Если в вашем приложении нет нужных библиотек, вам придется искать их и устанавливать самостоятельно; если вам повезет, они будут доступны через ням. Вы можете использовать «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
Это было очень полезно для установки Oracle jre 1.7 на 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 (файл для запуска «install»), вы получаете сообщение об ошибке, показанное в этом посте.

Дополнительные инструкции по устранению этой проблемы вы найдете на веб-странице IBM: https://www-304.ibm.com/support/docview.wss?uid=swg21459143

Надеюсь, это поможет любому, кто пытается это установить.

mmarquezvacas
источник
0

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

Nithin
источник
0

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

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

Виталий
источник
пожалуйста , включают основные части ссылки в своем ответе
IBO
0

.i686Вместо этого вы также можете установить 32-битный OpenJDK ( ). Согласно моему тесту, он будет установлен и работает без проблем.

sudo yum install java-1.8.0-openjdk.i686

Примечание:

Пакет java-1.8.0-openjdk содержит только среду выполнения Java . Если вы хотите разрабатывать программы на Java, установите пакет java-1.8.0-openjdk-devel .

Смотрите здесь для более подробной информации.

Мир-исмаилиты
источник