2017-02-01 2 views
0

Nehmen wir an, ich würde ein Programm mit Windows API programmieren und dann kompilieren. Der Code wird kompiliert, um Maschinencode für die CPU auszuführen. Nun, meine Frage ist: Wenn ich die ausführbare Datei für jemand anderen mit einem anderen Befehlssatz in ihrer CPU teile. Wie kann ihre CPU den Code auf die gleiche Weise ausführen und keine Fehler oder einen anderen Code ausführen?Wie kann ein Programm auf meiner CPU auf einer anderen CPU genauso laufen?

Antwort

1

jemand anderes mit einem anderen Befehlssatz in ihrer CPU ... Wie kann ihre CPU den Code auf die gleiche Weise

Der Code wird nicht ausgeführt laufen. Die CPUs sprechen einfach eine andere Sprache.

Sie haben zwei Möglichkeiten

  1. Code für die Ziel-CPU neu kompilieren (vorausgesetzt, Sie die gleiche Ausgangssprache und keine plattformspezifischen API verwenden können, so dass Sie mit C/C++ mit stdlib sind links)

  2. ein Skript/Bytecode schreiben und eine Laufzeit zur Verfügung zu verwenden für beide Plattformen das Script (oder Bytecode)

das ist zu interpretieren, warum es Runtime sind in Installationen wie JVM (für Java) und Skripte (Python, Scala, Lua, JavaScript usw.), wobei der Code in Form eines Skripts oder als plattformunabhängiger Code vorliegt.

Und jetzt - nächster Schritt. Wenn Sie die Windows-API verwenden, wird - wie der Name schon sagt - die API (Dienste) vom Windows-System bereitgestellt. Selbst wenn dieselbe CPU ohne das Windows-System (z. B. auf einem Linux-System) verwendet wird, wird die Anwendung nicht ausgeführt. (In Ordnung, es gibt oft eine Möglichkeit, Windows API unter Linux verfügbar zu machen, aber manchmal kann es schwierig sein).

Fazit: Binaries sind nicht tragbar zwischen Befehlssätzen, wenn Sie einen hohen Level-API verwenden (Win32, ...), bist du ziemlich süchtig auf das Betriebssystem zu

0

Wenn auf hohe Niveau Sprachen werden in ausführbare Dateien kompiliert, oft werden sie zu Zwischencode kompiliert. Dies ist eine Darstellung des Quellcodes, der näher an der Assemblersprache kompiliert wurde, jedoch nicht für einen bestimmten CPU-Befehlssatz. Es ist Aufgabe des ausführenden Computers, diesen Zwischencode zu interpretieren und ihn im nativen Befehlssatz der CPU auszuführen.

Verwandte Themen