Ich habe gestern Ubuntu 14.04 (Trusty Tahr) installiert. Alles scheint in Ordnung zu sein. Beim Kompilieren von C-Code tritt jedoch der folgende Fehler auf. Der Fehler scheint darauf zurückzuführen zu sein, dass das Betriebssystem die 32-Bit-Architektur nicht unterstützt. Die Fehlerausgabe ist wie folgt:
/usr/bin/ld: i386 architecture of input file `./libsc.a(ftl_msg.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `./libsc.a(libsc_debug.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `./libsc.a(libsc_str.o)' is incompatible with i386:x86-64 output
/usr/bin/ld: i386 architecture of input file `./libsc.a(libsc_cfg_common.o)' is incompatible with i386:x86-64 output
Ich habe apt-get install ia32-libs
verwendet, als ich Ubuntu 12.04 (Precise Pangolin) verwendet habe. Was ich aber weiß ist, dass Ubuntu die ia32-libs seit Ubuntu 13.10 (Saucy Salamander) entfernt hat. Wie kann ich dieses Problem beheben?
Sie können dies versuchen, um die 32-Bit-Bibliothek zu installieren (nicht alle in ia32-libs):
Sudo apt-get install program:i386
Sudo dpkg --add-architecture i386
ist möglicherweise erforderlich (falls Sie das noch nie ausgeführt haben).
Oder wenn Sie stattdessen die gesamte ia32-lib installieren möchten, versuchen Sie Folgendes:
Sudo -i
cd /etc/apt/sources.list.d
echo "deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multiverse" >ia32-libs-raring.list
apt-get update
apt-get install ia32-libs
PS: Auf diese Weise können Sie ia32-libs
installieren. Wir fügen jedoch stattdessen den Quellcode von 13.04 hinzu, sodass möglicherweise ein unbekanntes Problem vorliegt. Nach der Installation von ia32-libs
empfehle ich, ia32-libs-raring.list
in /etc/apt/sources.list.d
zu entfernen und Sudo apt-get update
auszuführen.
Wenn Sie die Abhängigkeit von Android SDK beheben möchten, können Sie Folgendes versuchen:
Sudo apt-get install -y libc6-i386 lib32stdc++6 lib32gcc1 lib32ncurses5 lib32z1
Installieren Sie die gcc multiple library.
Sudo apt-get install gcc-multilib
Die beste Antwort, die ich je gesehen habe, ist Wie starte ich 32-Bit-Anwendungen unter Ubuntu 64-Bit?
Sudo dpkg --add-architecture i386
Sudo apt-get update
Sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
Sudo ./adb
Ich habe es endlich geschafft! Hier ist mein Weg, und ich hoffe, es kann dir helfen :)
Sudo apt-get install libc6:i386
Sudo -i
cd /etc/apt/sources.list.d
echo "deb http://old-releases.ubuntu.com/ubuntu/ raring main restricted universe multiverse" >ia32-libs-raring.list
apt-get update
apt-get install ia32-libs
rm /etc/apt/sources.list.d/ia32-libs-raring.list
apt-get update
exit
Sudo apt-get install gcc-multilib
Ich weiß nicht, warum ich diese installieren muss, aber es funktioniert auf meinem Computer. Wenn Sie mit der Installation dieser Pakete fertig sind, ist es Zeit, es zu versuchen. Oh ja, ich muss es dir sagen. Wenn Sie diesmal Ihren Code kompilieren möchten, sollten Sie -m32
nach gcc
einfügen, zum Beispiel: gcc -m32 -o hello helloworld.c
. Nur noch einmal make clean
und make
. Viel Glück Freunde.
PS: Meine Umgebung ist: Ubuntu 14.04 64-Bit (Trusty Tahr) und GCC Version 4.8.4. Ich habe die Lösung in meinem Blog geschrieben, aber sie ist in Chinesisch :-) - Wie man ein 32-Bit-Programm unter Ubuntu 14.04 kompassiert .
Diese alternativen Bibliotheken haben für mich funktioniert:
Sudo apt-get update
Sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0 lib32stdc++6
Ich hatte das gleiche Problem wie oben und Eclipse schlug vor, Folgendes zu installieren:
Hint: On 64-bit systems, make sure the 32-bit libraries are installed:
"Sudo apt-get install ia32-libs"
or on some systems,
"Sudo apt-get install lib32z1"
Als ich versuchte, ia32-libs zu installieren, forderte Ubuntu drei weitere Pakete auf:
$ Sudo apt-get install ia32-libs
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package ia32-libs is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
However the following packages replace it:
lib32z1 lib32ncurses5 lib32bz2-1.0
E: Package 'ia32-libs' has no installation candidate
$
$ Sudo apt-get install lib32z1 lib32ncurses5 lib32bz2-1.0
Mit Android Studio und intellij musste ich auch die 32-Bit-Version von libstdc ++ 6 installieren:
Sudo apt-get install lib32stdc++6
Für mich muss ich rennen
Sudo dpkg --add-architecture i386
bevor Mike Tangs Antwort ausgeführt wird. Ansonsten kann ich ia32-libs nicht installieren.
Installieren Sie einfach die 32-Bit-Version des Programms anstelle der 64-Bit-Version.
Dies ist viel sicherer als die Installation von Paketen, die nicht für die jeweilige Distribution vorgesehen sind.
Ich habe diesen Vorschlag aus der Google Earth-Installationsanleitung für Ubuntu 14.04 . Google Earth verwendete ia32-libs
unter 64-Bit-Ubuntu 12.04.
Zitieren webupd8.org :
Das Paket ia32-libs ist in Ubuntu ab Ubuntu 13.10 nicht mehr verfügbar. Das Paket wurde durch die Multiarch-Unterstützung abgelöst, sodass Sie es nicht mehr benötigen. Einige 64-Bit-Pakete (bei denen es sich tatsächlich um 32-Bit-Anwendungen handelt) sind jedoch weiterhin von diesem Paket abhängig. Aus diesem Grund können sie nicht in Ubuntu 14.04 oder 13.10 installiert werden. 64bit. [...]
Das "Update" oder genauer gesagt die richtige Art, diese von ia32-libs abhängigen Apps zu installieren, besteht darin, einfach das 32-Bit-Paket auf Ubuntu 64-Bit zu installieren. Natürlich werden dadurch einige 32-Bit-Pakete installiert, aber so funktioniert Multiarch.
Das Problem bei einigen Programmen (wie Google Earth) ist, dass das 32-Bit-Paket Multiarch nicht unterstützt. Folglich müssen einige 32-Bit-Abhängigkeiten manuell installiert werden, damit die 32-Bit-Version des Programms unter Ubuntu 64-Bit ausgeführt wird.
Sudo dpkg --add-architecture i386 # only needed once
Sudo apt-get update
Sudo apt-get install libfontconfig1:i386 libx11-6:i386 libxrender1:i386 libxext6:i386 libgl1-mesa-glx:i386 libglu1-mesa:i386 libglib2.0-0:i386 libsm6:i386
Sudo -i
cd /etc/apt/sources.list.d
echo "deb http://archive.ubuntu.com/ubuntu/ precise main restricted universe multiverse" >ia32-libs-raring.list
apt-get update
apt-get install ia32-libs
rm /etc/apt/sources.list.d/ia32-libs-raring.list
apt-get update
exit
Wenn Sie in China sind, können Sie "raring" auf "exact" ändern (für buntu 13.04 (Raring Ringtail) und buntu 12.04 LTS (Precise Pangolin) ). Ich habe Beyond Compare auf Ubuntu 14.04 (Trusty Tahr) installiert.
Das Problem ist, dass die Pakete in vielen Fällen bereits Multiarch sind, sodass das i386-Paket nicht verfügbar ist, andere Pakete jedoch nur vom i386-Paket abhängen. Dies ist ein Problem im Repository, und die Manager der Repos sollten es beheben
Eine Lösung ist, die entsprechende Debian Paketmethode zu Ihrem Repository hinzuzufügen. Geben Sie dazu die folgenden Befehle ein:
echo "deb ftp.us.debian.org/debian wheezy main" >> /etc/apt/sources.list
Sudo apt-get update
Sudo apt-get install ia32-libs-i386
Die erste Zeile schreibt am Ende der sources.list
-Datei den Paketweg. Das funktioniert bei mir. Ich wünschte, das hilft dir.