Можно ли установить 32-битные библиотеки в 64-битной системе?
У меня установлены 32-битные разделяемые библиотеки, но я все еще получаю эту ошибку при попытке установить pogoplug:
./pogoplugfs: error while loading shared libraries: libfuse.so.2: wrong ELF class: ELFCLASS64
Есть ли что-то еще, что мне нужно сделать, чтобы программа загружалась из 32-битных библиотек?
Аналогичный вопрос был задан ранее в этом году, но не было дано никакого ответа.
2 ответа
Для некоторых библиотек в 64-битной системе могут быть установлены как 32-битные, так и 64-битные библиотеки. Это доступно через ia32-libs
пакет на Ubuntu 10.04 и раньше. Согласно списку файлов ia32-libs
, здесь нет libfuse.so.2
файл включен. Это означает, что вы не можете установить обе архитектуры одновременно.
Начиная с Ubuntu 11.10 Oneiric, пакеты могут разрешать одновременную установку для разных архитектур, которая называется "Multi-Arch". К сожалению, если я могу поверить, список файлов libfuse2
на Oneiric этот пакет еще не был переведен. Это можно определить из зависимостей пакета: если пакет зависит от multiarch-support
(как и libdrm2), он поддерживает мультиархитектуру. Однако это не является гарантией того, что пакет может быть установлен для нескольких архитектур одновременно.
Чтобы запросить в локальном кэше многоархивные возможности пакета, скажем, libc6
, бежать:
apt-cache show libc6 | grep ^Multi-Arch:
Для этой команды вывод Multi-Arch: same
, Это означает, что как 32-битная, так и 64-битная версии пакета могут быть установлены одновременно. Если выходных данных нет, пакет не готов к поддержке нескольких арок. Другие возможные значения foreign
(не устанавливается совместно, но может использоваться для удовлетворения зависимостей других архитектур) и allowed
(iirc, только один пакет может быть установлен за один раз, но пакет может использоваться для удовлетворения зависимостей других пакетов)
Вы должны быть в состоянии установить 32-битные пакеты в 64-битной системе с:
sudo apt-get install packagename:i386
Сборка 32-битного libfuse для 64-битных машин
Поскольку 32-разрядная библиотека предохранителей не поставляется с ia32-libs
У вас нет другого выбора, кроме как построить его самостоятельно.
Установите зависимости сборки для fuse и получите исходный код:
sudo apt-get install ia32-libs libc6-i386 sudo apt-get build-dep fuse apt-get source fuse
Сконфигурируйте исходное дерево и соберите 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-битной платформе.