Obwohl das ADT-Bundle (Android Development Tools) als Zip-Paket für 'Linux 64 Bit' verfügbar ist, enthält es folgende Anforderungen :
64-Bit-Distributionen müssen 32-Bit-Anwendungen ausführen können.
Tatsächlich führt das Ausführen der gepackten Eclipse auf einem Fedora 17 64-Bit-System zu Fehlern, da mehrere Entwicklungstools nicht gefunden werden können, z. B. adb
Oder aapt
:
Fehler beim Ausführen von aapt: Das Programm "/ home / juser / local / adt-bundle-linux / sdk / platform-tools / aapt" kann nicht ausgeführt werden: error = 2, Keine solche Datei oder kein solches Verzeichnis: error = 2, Keine solche Datei oder kein solches Verzeichnis
Die 'keine solche Datei' ist irreführend, weil sie dort ist (unter $ HOME / local):
adt-bundle-linux/sdk/platform-tools/aapt
Aber ich kann es nicht auf der Shell ausführen:
~/local $ ./adt-bundle-linux/sdk/platform-tools/aapt
zsh: no such file or directory: ./adt-bundle-linux/sdk/platform-tools/aapt
Blick auf die Datei
$ file adt-bundle-linux/sdk/platform-tools/aapt
adt-bundle-linux/sdk/platform-tools/aapt: ELF 32-bit LSB executable, Intel 80386,
version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8,
not stripped
wir sehen, dass es eine 32-Binärdatei ist. Und es scheint, dass mein System (derzeit) keine 32-Bit-Anwendungen ausführen kann.
Wie ändere ich das? Wie mache ich ein aktuelles Fedora 64-Bit-System, das 32-Bit-Anwendungen ausführen kann?
(Natürlich könnte man auch fragen, warum jemand 32-Bit-Binärdateien in ein Binärpaket namens "Linux 64-Bit" einfügt ...)
Antworten:
In Bezug darauf, dass Eclipse
adb
usw. nicht finden kann, liegt dies daran, dass sie ohne die 32-Bit-Shared-Libraries, die zum Ausführen auf dem System erforderlich sind, nicht ausführbar sind.In Bezug auf 32-Bit-Bibliotheken ist die Situation recht einfach: Sie müssen nur die entsprechenden 32-Bit-Bibliotheken installieren. Bei der 64-Bit-Fedora 17-Installation, die ich hier habe, befinden sich die primären 64-Bit-Bibliotheken in / usr / lib64 und optionale 32-Bit-Bibliotheken in / usr / lib. Also, wenn ich
ldd
sdk / platform-tools / adb aufrufe:Beachten Sie, dass sich alle in / lib befinden, einem Symlink zu / usr / lib (nicht / usr / lib64). Aussehen:
Eine 32-Bit-Standard-C-Bibliothek. Sie können die 32-Bit-SDK-Tools durchgehen und überprüfen, womit sie verknüpft sind
ldd
. Ich habe kein Beispiel zur Hand, aber wenn etwas fehltldd
, wird Folgendes gemeldet:Damit ldd funktioniert, benötigen Sie zunächst den 32-Bit-Loader, der mit dem 32-Bit-glibc geliefert wird (ohne dies nennt ldd es eine nicht ausführbare Datei und sagt Ihnen nichts):
Das ist abgeschnitten, aber das x86_64-Paket ist das, was Sie bereits haben. Der i686 ist die 32-Bit-Version. Installieren Sie das einfach.
Sie benötigen keines der 'devel'-Pakete, da nichts kompiliert wird. Darüber hinaus sollten fundierte Vermutungen und
yum whatprovides
/ oderyum search
Hilfe hilfreich sein (in der Liste für adb finden Sie auch 32-Bit-Versionen der C ++ - Bibliothek, ncurses, pthreads und einige Dinge, die ich nicht kenne).Schneller Tipp zur Verwendung von
whatprovides
:;)
quelle
ldd
. Aus dem Grund: Ich bin nicht überzeugt,file
die Bundle-Version vonadb
Displays aufzurufen : ELF 32-Bit-LSB-ausführbare Datei, Intel 80386 - nichts mit ARM-Emulation zu tun - und / usr / bin / adb (aus dem Fedora-Paket für Android-Tools) ist tatsächlich als ausführbare ELF 64-Bit-LSB-Datei x86-64 verfügbar .adt-bundle-linux/sdk/platform-tools/adb
, wird "keine dynamische ausführbare Datei" angezeigt . In Bezug auf den PFAD - dies ist nicht das Problem - funktioniert die vollständige Angabe des Pfads von z. B../adt-bundle-linux/sdk/platform-tools/adb
in einem Terminal nicht (führt zu 'zsh: keine solche Datei oder kein solches Verzeichnis [..]').Sie müssen das 32-Bit-glibc installieren:
Dadurch wird die irreführende Meldung "Keine solche Datei oder kein solches Verzeichnis" entfernt, wenn versucht wird, eine 32-Bit-Binärdatei auszuführen. Damit kann das 64-Bit-Fedora-System 32-Bit-Binärdateien ausführen.
Dadurch wird auch die irreführende Meldung "Keine dynamische ausführbare Datei"
ldd
beim Aufrufenldd
einer dynamischen 32-Bit-ausführbaren Datei entfernt.Jetzt müssen Sie fehlende 32-Bit-Bibliotheken installieren, mit denen die Binärdateien
adt-bundle-linux/sdk/platform-tools
verknüpft sind:Das ist es.
Hintergrund
Einige Hintergrundinformationen zum Ableiten der oben genannten Paketnamen. Zum Beispiel die Ausgabe von
bedeutet, dass für adb noch 2 Bibliotheken fehlen.
Für jedes 'nicht gefunden' müssen wir den Paketnamen nachschlagen, zB:
Jetzt nehmen wir den Paketbasisnamen und fügen '.i686' hinzu, um die 32-Bit-Version zu erhalten.
quelle
glibc.i686
ermöglicht die Installationldd
das ordnungsgemäße Arbeiten mit i386-Binärdateien.Sie können das erforderliche Paket installieren mit:
quelle