Можно ли установить 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 У вас нет другого выбора, кроме как построить его самостоятельно.

  1. Установите зависимости сборки для fuse и получите исходный код:

    sudo apt-get install ia32-libs libc6-i386
    sudo apt-get build-dep fuse
    apt-get source fuse
    
  2. Сконфигурируйте исходное дерево и соберите fuse (при необходимости измените имя каталога):

    cd fuse-2.8.4
    CFLAGS=-m32 ./configure --host=i386-linux-gnu
    make -j 50
    
  3. Установите 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/
    
  4. Обновите кеш компоновщика:

    sudo ldconfig
    
  5. (необязательно) Удалите исходные файлы:

    cd ..
    rm -r fuse-2.8.4
    

Да, есть. Установите ia32. После этого вы можете установить любые 32-битные программы на 64-битной платформе.

Другие вопросы по тегам