Im Allgemeinen sind Programme aufgrund der Unterschiede in ihrer Anwendungsbinärschnittstelle (ABI) nicht kompatibel .
Läuft das Programm nicht direkt auf der CPU?
NEIN ! Dies ist die Aufgabe des Betriebssystems, um zu verhindern , dass Anwendungen "direkt" auf der CPU ausgeführt werden. In der Regel ist eine Anwendung auf der untersten Ebene (dh auf der Ebene, auf der die Betriebssystem-API basiert) mit dem Kernel des Betriebssystems verbunden .
Liegt es daran, dass das kompilierte Programm selbst auf betriebssystemspezifische Bibliotheken verweisen muss?
Ja . Viele Betriebssystembibliotheken wurden geschrieben, um die Anbindung an das Betriebssystem selbst zu erleichtern. Es gibt jedoch ebenso viele, die plattformübergreifend geschrieben wurden. Diese verbergen die Low-Level-Betriebssystemschnittstelle vor dem Entwickler und gehen davon aus, dass die kompilierte Version für dieses Betriebssystem zur Laufzeit verfügbar ist (siehe unten).
Obwohl Bibliotheken werden geschrieben in einer plattformübergreifende Art und Weise, wenn kompiliert , können sie nicht werden , laufen Cross-Plattform. Sie müssen noch für das spezifische Zielbetriebssystem neu kompiliert werden, um wiederum die bestimmten zugrunde liegenden Komponenten des Betriebssystems (Kernels) zu nutzen.
Was ist der Unterschied zwischen einem kompilierten Programm für ein Betriebssystem und einem anderen?
Schließlich enthalten ausführbare Dateien selbst häufig sehr spezifische binäre Ladeheader usw. (z. B. das ausführbare PE- Dateiformat [.exe, .dll usw.] für Windows oder ELF für Linux [none, .o, .so , usw...]). Diese können auch Code zum Laden der kompilierten betriebssystemspezifischen Binärdateien für eine bestimmte Softwarebibliothek enthalten.
Aus Sicht eines Programmierers: Aufruf der Konvention . Kompilierter Code übergibt Variablen in einer bestimmten Reihenfolge (dh über Register oder auf dem Stapel) an Funktionen. Selbst dann muss vereinbart werden, wer für die "Bereinigung" von Funktionsaufrufen verantwortlich ist (der Anrufer oder der Angerufene?). Obwohl es mehrere standardmäßige und weit verbreitete x86-Aufrufkonventionen gibt , werden einige möglicherweise von bestimmten Betriebssystemen nicht unterstützt (dies ist Teil des ABI).