Est-il possible d'avoir des bibliothèques 32 bits installées sur un système 64 bits?

8

J'ai installé les bibliothèques partagées 32 bits, mais je reçois toujours cette erreur en essayant d'installer pogoplug:

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

Y a-t-il autre chose que je dois faire pour que le programme se charge à partir des bibliothèques 32 bits?

Une question similaire a été posée plus tôt cette année, mais n'a reçu aucune réponse.

Tapis
la source

Réponses:

9

Pour certaines bibliothèques, il est possible d'avoir à la fois les bibliothèques 32 bits et 64 bits installées sur un système 64 bits. Ceci est disponible via le ia32-libspackage sur Ubuntu 10.04 et avant. Selon la liste de fichiers deia32-libs , aucun libfuse.so.2fichier n'est inclus. Cela signifie que vous ne pouvez pas installer les deux architectures à la fois.

Depuis Ubuntu 11.10 Oneiric, il est possible pour les packages de permettre l'installation simultanée de différentes architectures qui est appelée "Multi-Arch". Malheureusement, si je peux croire la liste de fichiers de libfuse2Oneiric , ce paquet n'a pas encore été transféré. Cela peut être déterminé à partir des dépendances du package: si un package en dépend multiarch-support(comme libdrm2 ), il prend en charge le support multi-arch. Cependant, cela ne garantit pas que le package peut être installé pour plusieurs architectures simultanément.

Pour interroger votre cache local pour les capacités multi-arch d'un package, par exemple libc6, exécutez:

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

Pour cette commande, la sortie est Multi-Arch: same. Cela signifie que les versions 32 bits et 64 bits d'un package peuvent être installées à la fois. S'il n'y a pas de sortie, le package n'est pas prêt pour la prise en charge multi-arch. D'autres valeurs possibles sont foreign(non co-installables, mais elles peuvent être utilisées pour satisfaire les dépendances d'autres architectures) et allowed(iirc, un seul package est autorisé à être installé à la fois, mais le package peut être utilisé pour satisfaire les dépendances d'autres paquets)

Vous devriez pouvoir installer des packages 32 bits sur un système 64 bits avec:

sudo apt-get install packagename:i386

Création de libfuse 32 bits pour les machines 64 bits

Étant donné que la bibliothèque de fusibles 32 bits n'est pas fournie ia32-libs, vous n'avez pas d'autre choix que de la construire vous-même.

  1. Installez les dépendances de construction pour fuse et obtenez le code source:

    sudo apt-get install ia32-libs libc6-i386
    sudo apt-get build-dep fuse
    apt-get source fuse
    
  2. Configurez l'arborescence source et construisez le fusible (ajustez le nom du répertoire si nécessaire):

    cd fuse-2.8.4
    CFLAGS=-m32 ./configure --host=i386-linux-gnu
    make -j 50
    
  3. Installez la bibliothèque de fusibles 32 bits (ajustez la version en conséquence):

    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. Mettez à jour le cache de l'éditeur de liens:

    sudo ldconfig
    
  5. (facultatif) Supprimez les fichiers source:

    cd ..
    rm -r fuse-2.8.4
    
Lekensteyn
la source
0

Oui il y a. Installez ia32. Une fois cela fait, vous pouvez maintenant installer tous les programmes 32 bits sur une plate-forme 64 bits.

Imo Ekpo
la source
J'avais installé ia32 (c'est ce dont je parlais avec les bibliothèques partagées). Cela n'a amené l'erreur qu'avec libfuse.so.2
Mat
1
ia32-libsne contient pas toutes les bibliothèques 32 bits.
Lekensteyn