Führen Sie die 64-Bit-App auf einem 32-Bit-Ubuntu-System aus

10

Alle Fragen, die ich gesehen habe, beziehen sich auf das Ausführen einer 32-Bit-App in einem 64-Bit-System.

Ich verwende 32-Bit-Ubuntu 12.04 (eigentlich elementares Betriebssystem Luna, das darauf basiert) und versuche, eine 64-Bit-App auszuführen, die das Öffnen verweigert. Laufen:

./64bit_app.run

(Wo 64bit_app.runist die 64-Bit-App, die ich ausführen möchte) führt zu:

bash: ./64bit_app.run: no se puede ejecutar el fichero binario

was übersetzt bedeutet " Binärdatei kann nicht ausgeführt / ausgeführt / geöffnet werden ".

Sollte ich es ausführen können? Ist es möglich, eine 64-Bit-App in einem 32-Bit-System auszuführen? Wenn das so ist, wie?

Gabriel
quelle
Ich habe dies nicht versucht, aber haben Sie die hier gezeigten Lösungen versucht , insbesondere die erklärende Antwort dpkg --add-architecture? Soweit ich weiß, sollte der gleiche Ansatz für 32 auf 64 und für 64 auf 32 funktionieren. Wechseln Sie einfach dpkg --add-architecture i386zu dpkg --add-architecture amd64.
Terdon
1
Sie tun 64-Bit - Hardware haben, nicht wahr? (nur um sicher zu gehen)
strugee
"was weigert sich zu öffnen"? wie genau?
Braiam
1
Bitte lesen Sie die Antworten auf die Frage, auf die ich verlinkt habe . Sie müssen sudo dpkg --add-architecture amd64zuerst ausgeführt werden. Das ist ein separater Befehl.
Terdon
1
@terdon sorry, das habe ich nicht verstanden. Das Ausführen dieser Zeile führt zu: dpkg: error: opción --add-architecture desconocidawohin desconocidaübersetzt unknown.
Gabriel

Antworten:

8

Sie können dies nicht direkt unter Linux unter x86_64 mit einem 32-Bit-Kernel tun. Sie benötigen einen 64-Bit-Kernel, um 64-Bit-Code ausführen zu können. (Hinweis: Kernel. Sie können 32-Bit-Userland auf einem 64-Bit-Kernel ausführen und die Unterstützung für 64-Bit-Binärdateien installieren. Wie einfach dies ist, hängt von der Verteilung ab. Beispiel hier für Debian.)

Einige Virtualisierungssoftware können dies (mit Einschränkungen hinsichtlich des verwendeten CPU-Typs), und Emulatoren können dies auch. Aber um es nativ auszuführen, benötigen Sie einen 64-Bit-Kernel.

Da die meisten 64-Bit-Distributionen 32-Bit-Unterstützung bieten (entweder standardmäßig oder installierbar), sollten Sie diese verwenden, wenn Sie sowohl 64-Bit- als auch 32-Bit-Binärdateien auf demselben Betriebssystem ausführen müssen.

Matte
quelle
7

Antwort von @ Mat erweitern:

Ja, einige Virtualisierungssoftware können dies tun. Das Haupthindernis besteht darin, dass in einer 32-Bit-Umgebung die 64-Bit-Funktionen der CPU nicht verfügbar sind und auch die Funktionen eines 64-Bit-Kernels nicht verfügbar sind. Dies gilt auch dann, wenn Ihre CPU 64-Bit-Unterstützung bietet (seit etwa 2003 haben alle diese Unterstützung).

Ihre Frage besagt implizit, dass Sie die 64-Bit-App in Ihrer eigenen Systemumgebung ausführen möchten. Wenn es wirklich Ihre Absicht ist, schließt dies alle auf virtuellen Maschinen basierenden Lösungen aus. Das einzige, was mir noch bekannt ist, ist die Kernel-Emulation des Qemu. So:

qemu-x86_64 ./your_64bit_app

Es führt Ihre App auf Ihrem aktuellen System mit Ihrem aktuellen Kernel und Ihren aktuellen Umgebungsvariablen aus . Natürlich ist es nicht sehr schnell, es muss Ihre CPU emulieren.

Es können nur Linux x86-64-Apps emuliert werden.

Peter - Setzen Sie Monica wieder ein
quelle
Irgendwo habe ich auch gelesen, als ob auch VMware das könnte, aber das sind nicht genug sichere Informationen für eine Antwort. Afaik aktuelle VMware ist nur 64-Bit auf der Host-Seite.
Peter
1

Die meisten 64-Bit-Architekturen sind Erweiterungen der 32-Bit-Architekturen. Sie sind neuer und völlig anders, sodass eine 32-Bit-Architektur offensichtlich keine Ahnung hat, was das 64-Bit-Gegenstück ist. Sie wissen nicht, was die neuen Funktionen sind, welche neuen Register es gibt ... Selbst wenn sie es wissen, haben sie keinen Zugriff auf die neuen Register und Funktionen. Infolgedessen kann ein 32-Bit-Kernel keine 64-Bit-Kontexte speichern. All dies macht das Ausführen von 64-Bit-Apps auf einem 32-Bit-System unmöglich.

Ein sorgfältig gestalteter 64-Bit-fähiger 32-Bit-Kernel kann 64-Bit-Apps ausführen, benötigt jedoch noch 64-Bit-Code, um die Kontexteinsparungen zu erzielen, sodass er kein reiner 32-Bit-Kernel mehr ist.

Sie können ein 64-Bit-Betriebssystem in einem Emulator oder eine virtuelle 64-Bit-Gastmaschine in einem 32-Bit-Host mit VT-x ausführen. Technisch gesehen laufen Sie jedoch in einem anderen 64-Bit-System. Es ist immer noch nicht möglich, 64-Bit-Code direkt auf dem 32-Bit-Linux-Kernel auszuführen

phuclv
quelle