È possibile avere librerie a 32 bit installate su un sistema a 64 bit?


8

Ho installato le librerie condivise a 32 bit, ma sto ancora ricevendo questo errore durante il tentativo di installare pogoplug:

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

C'è qualcos'altro che devo fare per caricare il programma dalle librerie a 32 bit?

Una domanda simile è stata posta all'inizio di quest'anno, ma non è stata data alcuna risposta.

Risposte:


9

Per alcune librerie, è possibile avere entrambe le librerie a 32 e 64 bit installate su un sistema a 64 bit. Questo è disponibile attraverso il ia32-libspacchetto su Ubuntu 10.04 e precedenti. Secondo l'elenco diia32-libslibfuse.so.2 file di , non è incluso alcun file. Ciò significa che non è possibile installare entrambe le architetture alla volta.

Da Ubuntu 11.10 Oneiric, è possibile per i pacchetti consentire l'installazione simultanea per architetture diverse che si chiama "Multi-Arch". Sfortunatamente, se posso credere alla lista di file libfuse2su Oneiric , questo pacchetto non è stato ancora trasferito. Ciò può essere determinato dalle dipendenze del pacchetto: se un pacchetto dipende multiarch-support(come libdrm2 ), ha il supporto per il supporto multi-arch. Tuttavia, ciò non garantisce che il pacchetto possa essere installato contemporaneamente per più architetture.

Per libc6eseguire una query nella cache locale per le funzionalità multi-arch di un pacchetto, ad esempio , eseguire:

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

Per questo comando, l'output è Multi-Arch: same. Ciò significa che è possibile installare contemporaneamente entrambe le versioni a 32 e 64 bit di un pacchetto. Se non c'è output, il pacchetto non è pronto per il supporto multi-arch. Altri possibili valori sono foreign(non installabili insieme, ma possono essere utilizzati per soddisfare le dipendenze di altre architetture) e allowed(iirc, è consentito installare un solo pacchetto alla volta, ma il pacchetto può essere utilizzato per soddisfare dipendenze di altri pacchi)

Dovresti essere in grado di installare pacchetti a 32 bit su un sistema a 64 bit con:

sudo apt-get install packagename:i386

Creazione di libfuse a 32 bit per macchine a 64 bit

Poiché la libreria di fusibili a 32 bit non è fornita ia32-libs, non hai altra scelta che costruirla da solo.

  1. Installa le dipendenze di build per miccia e ottieni il codice sorgente:

    sudo apt-get install ia32-libs libc6-i386
    sudo apt-get build-dep fuse
    apt-get source fuse
    
  2. Configura l'albero dei sorgenti e crea il fusibile (modifica il nome della directory se necessario):

    cd fuse-2.8.4
    CFLAGS=-m32 ./configure --host=i386-linux-gnu
    make -j 50
    
  3. Installa la libreria dei fusibili a 32 bit (regola la versione di conseguenza):

    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. Aggiorna la cache del linker:

    sudo ldconfig
    
  5. (opzionale) Rimuovere i file di origine:

    cd ..
    rm -r fuse-2.8.4
    

0

Si C'è. Installa ia32. Fatto ciò, ora è possibile installare qualsiasi programma basato su 32 bit su una piattaforma a 64 bit.


Avevo installato ia32 (ecco di cosa stavo parlando con le librerie condivise). Questo ha portato all'errore solo con libfuse.so.2
Mat

1
ia32-libsnon contiene tutte le librerie a 32 bit.
Lekensteyn,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.