Ist es möglich, 32-Bit-Bibliotheken auf einem 64-Bit-System zu installieren?

8

Ich habe die gemeinsam genutzten 32-Bit-Bibliotheken installiert, erhalte jedoch immer noch den Fehler, wenn ich versuche, pogoplug zu installieren:

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

Muss ich noch etwas tun, damit das Programm aus den 32-Bit-Bibliotheken geladen wird?

Eine ähnliche Frage wurde Anfang dieses Jahres gestellt, aber nicht beantwortet.

Matte
quelle

Antworten:

9

Bei einigen Bibliotheken können sowohl die 32-Bit- als auch die 64-Bit-Bibliotheken auf einem 64-Bit-System installiert sein. Dies ist über das ia32-libsPaket unter Ubuntu 10.04 und früher verfügbar . Laut der Dateiliste vonia32-libs ist keine libfuse.so.2Datei enthalten. Das bedeutet, dass nicht beide Architekturen gleichzeitig installiert sein können.

Seit Ubuntu 11.10 Oneiric können Pakete gleichzeitig für verschiedene Architekturen installiert werden, was als "Multi-Arch" bezeichnet wird. Wenn ich der Dateiliste von libfuse2Oneiric glauben darf , wurde dieses Paket leider noch nicht umgestellt . Dies kann anhand der Paketabhängigkeiten ermittelt werden: Wenn ein Paket von multiarch-support(wie libdrm2 ) abhängt , unterstützt es die Unterstützung mehrerer Archive . Dies ist jedoch keine Garantie dafür, dass das Paket für mehrere Architekturen gleichzeitig installiert werden kann.

Führen Sie beispielsweise Folgendes aus, um Ihren lokalen Cache nach den Multi-Arch-Funktionen eines Pakets abzufragen libc6:

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

Für diesen Befehl lautet die Ausgabe Multi-Arch: same. Dies bedeutet, dass sowohl die 32-Bit- als auch die 64-Bit-Version eines Pakets gleichzeitig installiert werden können. Wenn keine Ausgabe erfolgt, ist das Paket nicht für die Unterstützung mehrerer Bögen bereit. Andere mögliche Werte sind foreign(nicht gemeinsam installierbar, kann jedoch verwendet werden, um die Abhängigkeiten anderer Architekturen zu erfüllen) und allowed(iirc darf jeweils nur ein Paket installiert werden, das Paket kann jedoch verwendet werden, um Abhängigkeiten anderer zu erfüllen Pakete)

Sie sollten in der Lage sein, 32-Bit-Pakete auf einem 64-Bit-System zu installieren mit:

sudo apt-get install packagename:i386

Erstellen einer 32-Bit-Libfuse für 64-Bit-Computer

Da die 32-Bit-Sicherungsbibliothek nicht mitgeliefert wird ia32-libs, haben Sie keine andere Wahl, als sie selbst zu erstellen.

  1. Installieren Sie die Build-Abhängigkeiten für Fuse und rufen Sie den Quellcode ab:

    sudo apt-get install ia32-libs libc6-i386
    sudo apt-get build-dep fuse
    apt-get source fuse
    
  2. Konfigurieren Sie den Quellbaum und erstellen Sie eine Sicherung (passen Sie den Verzeichnisnamen bei Bedarf an):

    cd fuse-2.8.4
    CFLAGS=-m32 ./configure --host=i386-linux-gnu
    make -j 50
    
  3. Installieren Sie die 32-Bit-Sicherungsbibliothek (passen Sie die Version entsprechend an):

    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. Aktualisieren Sie den Linker-Cache:

    sudo ldconfig
    
  5. (optional) Entfernen Sie die Quelldateien:

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

Ja da ist. Installieren Sie ia32. Sobald dies erledigt ist, können Sie jetzt alle 32-Bit-basierten Programme auf einer 64-Bit-Plattform installieren.

Imo Ekpo
quelle
Ich hatte ia32 installiert (darüber habe ich mit den gemeinsam genutzten Bibliotheken gesprochen). Dies brachte nur den Fehler mit libfuse.so.2
Mat
1
ia32-libsenthält nicht alle 32-Bit-Bibliotheken.
Lekensteyn