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.

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
    

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.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.