CentOS 64-разрядный плохой ELF-интерпретатор

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

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

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

Ответ 1

Вы находитесь в 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

должен захватить вам (первую, основную) библиотеку, в которой вы нуждаетесь.

После этого вам, вероятно, понадобятся поддержка 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 года)

Ответ 2

Только что столкнулась с той же проблемой на недавно установленной 64-разрядной платформе CentOS 6.4. Одна команда yum исправит это плюс 99% подобных проблем:

yum groupinstall "Библиотеки совместимости"

Либо префикс это с помощью 'sudo', либо запускается от имени root, что лучше всего подходит вам.

Ответ 3

В общем, когда вы получаете такую ​​ошибку, просто сделайте

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

Ответ 4

Try

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

Надеюсь, что это очистится.

Ответ 5

Просто хотел добавить комментарий в BRPocock, но у меня нет достаточных привилегий.

Итак, мой вклад был сделан для всех, кто пытается установить пакет IBM Integration Toolkit из пакета IBM Integration Bus.

При попытке запустить команду "Installation Manager" из папки /Integration _Toolkit/IM_Linux (файл для запуска "установить" ) вы получите сообщение об ошибке, указанное в этом сообщении.

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

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

Ответ 6

sudo yum install fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdС++. so.6

Ответ 7

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

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

Ответ 8

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

sudo yum install java-1.8.0-openjdk.i686

Замечания:

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

Подробнее см. Здесь.