CentOS 64 бит плохой ELF интерпретатор - PullRequest
172 голосов
/ 30 ноября 2011

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

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

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

Ответы [ 8 ]

342 голосов
/ 30 ноября 2011

Вы работаете в 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 г.)

17 голосов
/ 04 ноября 2013

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

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

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

13 голосов
/ 19 января 2015

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

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 голосов
/ 16 мая 2017

Попробуйте

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

Надеюсь, это прояснится.

0 голосов
/ 01 декабря 2018

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

sudo yum install java-1.8.0-openjdk.i686

Примечание:

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

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

0 голосов
/ 23 октября 2017

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

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

0 голосов
/ 17 мая 2016

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

0 голосов
/ 03 декабря 2014

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

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

Когда вы пытаетесь запустить команду «Installation Manager» из папки / Integration_Toolkit / IM_Linux (файл для запуска «install»), вы получаете сообщение об ошибке, показанное в этом посте.

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

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

...