Я только что установил версию CentOS 6 64bit, я пытаюсь установить 32-разрядное приложение на 64-разрядную машину и получил эту ошибку:
/lib/ld-linux.so.2: плохой интерпретатор ELF: нет такого файла или каталога
Я новичок в Linux. Как это разрешить?
Я только что установил версию CentOS 6 64bit, я пытаюсь установить 32-разрядное приложение на 64-разрядную машину и получил эту ошибку:
/lib/ld-linux.so.2: плохой интерпретатор ELF: нет такого файла или каталога
Я новичок в Linux. Как это разрешить?
Вы находитесь в 64-битной системе и не имеете 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, вы, вероятно, захотите избежать использования программного обеспечения из источников, отличных от вашего менеджера пакетов, когда это возможно...
Тип
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 года)
Только что столкнулась с той же проблемой на недавно установленной 64-разрядной платформе CentOS 6.4. Одна команда yum исправит это плюс 99% подобных проблем:
yum groupinstall "Библиотеки совместимости"
Либо префикс это с помощью 'sudo', либо запускается от имени root, что лучше всего подходит вам.
В общем, когда вы получаете такую ошибку, просто сделайте
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
Try
$ yum provides ld-linux.so.2
$ yum update
$ yum install glibc.i686 libfreetype.so.6 libfontconfig.so.1 libstdc++.so.6
Надеюсь, что это очистится.
Просто хотел добавить комментарий в BRPocock, но у меня нет достаточных привилегий.
Итак, мой вклад был сделан для всех, кто пытается установить пакет IBM Integration Toolkit из пакета IBM Integration Bus.
При попытке запустить команду "Installation Manager" из папки /Integration _Toolkit/IM_Linux (файл для запуска "установить" ) вы получите сообщение об ошибке, указанное в этом сообщении.
Дополнительные инструкции по устранению этой проблемы вы найдете на этой веб-странице IBM: https://www-304.ibm.com/support/docview.wss?uid=swg21459143
Надеюсь, это поможет любому, кто пытается установить это.
sudo yum install fontconfig freetype libfreetype.so.6 libfontconfig.so.1 libstdС++. so.6
Я бы добавил, что для Debian вам нужен хотя бы один компилятор в системе (в соответствии с 32-битными библиотеками Debian Stretch и Jessie).
Я установил apt-get install -y gcc-multilib для запуска 32-битного исполняемого файла в моем контейнере докеров на основе debian: jessie.
Вы также можете установить 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.
Подробнее см. Здесь.