Можно ли установить 32-битные библиотеки в 64-битной системе?

8

У меня установлены 32-битные разделяемые библиотеки, но я все еще получаю эту ошибку при попытке установить pogoplug:

./pogoplugfs: error while loading shared libraries: libfuse.so.2: wrong ELF class: ELFCLASS64

Есть ли что-то еще, что мне нужно сделать, чтобы программа загружалась из 32-битных библиотек?

Аналогичный вопрос был задан ранее в этом году, но ответа не было.

Мат
источник

Ответы:

9

Для некоторых библиотек в 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
    
Lekensteyn
источник
0

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

Имо Экпо
источник
У меня был установлен ia32 (об этом я и говорил с общими библиотеками). Это только подняло ошибку с libfuse.so.2
Мат
1
ia32-libsне содержит все 32-битные библиотеки.
Лекенштейн