¿Es posible tener bibliotecas de 32 bits instaladas en un sistema de 64 bits?

8

Tengo instaladas las bibliotecas compartidas de 32 bits, pero sigo recibiendo este error al intentar instalar pogoplug:

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

¿Hay algo más que deba hacer para que el programa se cargue desde las bibliotecas de 32 bits?

Se hizo una pregunta similar a principios de este año, pero no recibió ninguna respuesta.

Estera
fuente

Respuestas:

9

Para algunas bibliotecas, es posible tener las bibliotecas de 32 bits y de 64 bits instaladas en un sistema de 64 bits. Esto está disponible a través del ia32-libspaquete en Ubuntu 10.04 y anteriores. Según la lista de archivos deia32-libs , no hay ningún libfuse.so.2archivo incluido. Eso significa que no puede tener ambas arquitecturas instaladas a la vez.

Desde Ubuntu 11.10 Oneiric, es posible que los paquetes permitan la instalación simultánea de diferentes arquitecturas, lo que se denomina "Multi-Arch". Desafortunadamente, si puedo creer la lista de archivos de libfuse2Oneiric , este paquete aún no se ha realizado la transición. Eso se puede determinar a partir de las dependencias del paquete: si un paquete depende de multiarch-support(como libdrm2 ), tiene soporte para soporte de múltiples arcos. Sin embargo, esto no garantiza que el paquete pueda instalarse para múltiples arquitecturas simultáneamente.

Para consultar en su caché local las capacidades de múltiples arcos de un paquete, por ejemplo libc6, ejecute:

apt-cache show libc6 | grep ^Multi-Arch:

Para este comando, la salida es Multi-Arch: same. Eso significa que tanto las versiones de 32 bits como las de 64 bits de un paquete se pueden instalar a la vez. Si no hay salida, el paquete no está listo para el soporte de múltiples arcos. Otros valores posibles son foreign(no allowedcoinstalables , pero se pueden usar para satisfacer las dependencias de otras arquitecturas) y (iirc, solo se permite instalar un paquete a la vez, pero el paquete se puede usar para satisfacer las dependencias de otros paquetes)

Debería poder instalar paquetes de 32 bits en un sistema de 64 bits con:

sudo apt-get install packagename:i386

Creación de libfuse de 32 bits para máquinas de 64 bits

Como la biblioteca de fusibles de 32 bits no se suministra ia32-libs, no tiene otra opción que construirla usted mismo.

  1. Instale las dependencias de compilación para el fusible y obtenga el código fuente:

    sudo apt-get install ia32-libs libc6-i386
    sudo apt-get build-dep fuse
    apt-get source fuse
    
  2. Configure el árbol de origen y el fusible de construcción (ajuste el nombre del directorio si es necesario):

    cd fuse-2.8.4
    CFLAGS=-m32 ./configure --host=i386-linux-gnu
    make -j 50
    
  3. Instale la biblioteca de fusibles de 32 bits (ajuste la versión en consecuencia):

    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. Actualice el caché del vinculador:

    sudo ldconfig
    
  5. (opcional) Eliminar los archivos de origen:

    cd ..
    rm -r fuse-2.8.4
    
Lekensteyn
fuente
0

Sí hay. Instala ia32. Una vez hecho esto, ahora puede instalar cualquier programa basado en 32 bits en una plataforma de 64 bits.

Imo Ekpo
fuente
Tenía instalado ia32 (de eso hablaba con las bibliotecas compartidas). Esto solo provocó el error con libfuse.so.2
Mat
1
ia32-libsno contiene todas las bibliotecas de 32 bits.
Lekensteyn