У меня есть совместно использованные установленные библиотеки на 32 бита, все же я все еще получаю эту ошибку при попытке установить Pogoplug:
./pogoplugfs: error while loading shared libraries: libfuse.so.2: wrong ELF class: ELFCLASS64
Есть ли что-то еще, что я должен сделать, чтобы заставить программу загружаться из библиотек на 32 бита?
Подобный вопрос задали ранее в этом году, но не дали ответа.
Для некоторых библиотек возможно иметь и 32-разрядные и 64-разрядные библиотеки, установленные в 64-разрядной системе. Это доступно через ia32-libs
пакет на Ubuntu 10.04 и прежде. Согласно списку файлов ia32-libs
, существует нет libfuse.so.2
файл включен. Это означает, что у Вас не может быть обеих архитектуры, установленной за один раз.
Начиная со Сновещательной Ubuntu 11.10 для пакетов возможно позволить одновременную установку для различной архитектуры, которую называют "Мультидугой". К сожалению, если я могу верить списку файлов libfuse2
на Сновещательном этот пакет еще не перешелся. Это может быть определено от зависимостей от пакета: если пакет зависит от multiarch-support
(как libdrm2), это имеет поддержку мультисупинатора. Однако это не гарантия, что пакет может быть установлен для нескольких архитектуры одновременно.
Для запросов локального кэша для возможностей мультидуги пакета сказать libc6
, выполненный:
apt-cache show libc6 | grep ^Multi-Arch:
Для этой команды вывод Multi-Arch: same
. Это означает, что и 32-разрядные и 64-разрядные версии пакета могут быть установлены за один раз. Если нет никакого вывода, пакет не готов к мультисупинатору. Другие возможные значения foreign
(не co-installable, но это может использоваться для удовлетворения зависимостей другой архитектуры), и allowed
(iirc, только одному пакету позволяют быть установленным за один раз, но пакет может использоваться для удовлетворения зависимостей других пакетов),
Необходимо смочь установить 32-разрядные пакеты в 64-разрядной системе с:
sudo apt-get install packagename:i386
Так как 32-разрядная библиотека предохранителя не предоставляется ia32-libs
, у Вас нет никакого другого выбора, чем создание его самих.
Установите зависимости от сборки для предохранителя и получите исходный код:
sudo apt-get install ia32-libs libc6-i386
sudo apt-get build-dep fuse
apt-get source fuse
Настройте исходное дерево и создайте предохранитель (скорректируйте имя каталога в случае необходимости):
cd fuse-2.8.4
CFLAGS=-m32 ./configure --host=i386-linux-gnu
make -j 50
Установите 32-разрядную библиотеку предохранителя (скорректируйте версию соответственно):
sudo ln -s libfuse.so.2.8.4 /usr/local/lib/libfuse.so.2
sudo install -m644 lib/.libs/libfuse.so.2.8.4 /usr/local/lib/
Обновите кэш компоновщика:
sudo ldconfig
(Дополнительно) Удалите исходные файлы:
cd ..
rm -r fuse-2.8.4
Да существует. Установка ia32. После того как это сделано, можно теперь установить любые программы основанные на 32 битах на платформе на 64 бита.