Ich brauche das mksdcard
aus dem Android SDK zu verwenden. Derzeit meldet das System beim Ausführen dieser ausführbaren Datei "Keine solche Datei oder kein solches Verzeichnis".
Für Debian kann man ia32-libs installieren . Unter Ubuntu wird das Paket aufgerufen libc6-i386
.
Wie bekomme ich die Datei /lib/ld-linux.so.2
auf NixOS?
linux
runtime-error
Janus Troelsen
quelle
quelle
ld
? Normalerweise müssen Sie nurld
32-Bit-Bibliotheken / -Objekte verknüpfen. Was versuchen Sie mit dem "32-Bit-Laufzeitlinker", den Sie jetzt nicht können?/lib64/ld-linux-x86-64.so.2
für ausführbare 64-Bit-Dateien und/lib/ld-linux.so.2
für 32-Bit- Dateien aufgerufen . Ich bestätigte dies, indem ich ein Beispiel-C-Programm mit und ohne kompilierte-m32
und es dann ausführteldd
.Antworten:
NixOS unterstützt Multiarch nicht von Haus aus.
Das einzige Nix-Paket, das die 32-Bit-ELF-Interpreterdatei
ld-linux.so.2
enthält, ist die i386-Version von glibc.Glücklicherweise können wir das Problem umgehen, indem wir das Paket von Debian ausleihen.
dpkg
:nix-env -i dpkg
libc-i386
Paket für 64-Bit-Systeme von debian herunter :curl -O http://ftp.us.debian.org/debian/pool/main/e/eglibc/libc6-i386_2.11.3-4_amd64.deb
dpkg -x libc6-i386_2.11.3-4_amd64.deb libc6-i386
mksdcard
mit 32-Bit - ELF - Interpreter:./libc6-i386/lib32/ld-linux.so.2 /path/to/mksdcard
Eine Möglichkeit, Dinge wie
mksdcard
via auszuführen,./mksdcard
besteht darin, sie mitpatchelf
installierten via zu patchen :nix-env -i patchelf
Sie können dann so etwas tun
patchelf --set--interpreter /path/to/libc6-i386/lib32/ld-linux.so.2 /path/to/mksdcard
Andernfalls können Sie versuchen, Symlinks auf Ihre Website an
ld-linux.so.2
den Stellen zu platzieren, an denenldd
sie Ihnen mitteilt, dass sie von Ihnen erwartet werden.quelle
Sie können diesen Code ausprobieren. (Ich bin nicht sicher, ob es funktioniert, weil ich dies in meinem Fedora-Betriebssystem und auch für Ubuntu-Betriebssysteme getan habe.)
Laden Sie das SDK von diesem Code herunter:
Nachdem der Download abgeschlossen ist, extrahieren Sie den Ordner
android-sdk-linux
in Ihr Ausgangsverzeichnis./ home / user / android-sdk-linux
Erstellen Sie eine Umgebungsvariable namens
ANDROID_HOME
.ANDROID_HOME = / home / user / android-sdk-linux
Und diese beiden Ordner auf Ihre Umgebungsvariable PATH,
Führen Sie die folgenden Befehle im Terminal aus, um das Android ARM-Image herunterzuladen und das SDK zu aktualisieren:
Um nun eine AVD zu erstellen, führen Sie diesen Befehl im Terminal aus:
HINWEIS: Im obigen Befehl ist 'emul' der AVD-Name.
Führen Sie nach Abschluss dieser Schritte den folgenden Befehl im Terminal aus, um die im obigen Schritt erstellte AVD zu starten:
Emulator -avd Emul -noskin -netfast
quelle
Auf der meiner Version von NixOS, konnte ich eine Arbeit bekommen
mksdcard
durch Ausgabe:nix-env -i android-sdk-24.1.2
nach einem tunnix-channel --update
Von Package Management Grunde : abonniert „Nixpkgs wird automatisch in der Liste der hinzugefügt‚‘Kanäle , wenn Sie Nichts zu installieren.“
Wenn Sie jedoch das Abonnement entfernt haben oder lieber "eine ältere Version des Pakets installieren möchten als die, die vom aktuellen Inhalt des Kanals bereitgestellt wird" oder wenn das android sdk-Paket "aus dem Kanal entfernt wurde", können Sie dies Befolgen Sie die Anweisungen zur One-Click-Installation :
In diesem Fall würde Sie x86_64 android-studio interessieren
Meine Systeminformationen als Referenz
[root@nixos:~]# uname -a Linux nixos 3.18.20 #1-NixOS SMP Thu Jan 1 00:00:01 UTC 1970 x86_64 GNU/Linux
quelle