
Die Frage ist etwas speziell, gehen Sie daher von Folgendem aus:
- Der C-Quellcode des Programms verwendet nicht explizit plattformspezifische Funktionen (er verwendet beispielsweise nicht explizit Systemaufrufe).
- Zur Interaktion mit dem Betriebssystem verwendet der Quellcode die C-Standardbibliothek.
- Die Standardbibliothek wird zur Kompilierzeit nicht verknüpft.
- Das Programm wurde auf einem Linux-Rechner für Linux kompiliert und dann auf einen anderen Rechner mit Windows verschoben.
- Bevor das Programm unter Windows ausgeführt wird, wird die ausführbare Linux-Datei (irgendwie) in ein mit Windows kompatibles Format konvertiert.
- Beide Maschinen haben die gleiche Hardware.
- Beide Maschinen haben eine Implementierung der C-Standardbibliothek.
Nun zu den Fragen:
- Kann das Programm unter Berücksichtigung aller oben genannten Annahmen unter Windows ausgeführt werden? Wenn nicht, warum?
- Wenn eine Annahme falsch ist, warum ist das so?
Antwort1
Die Binärdateien unter Windows und Linux haben sehr unterschiedliche Formate, sodass sie nicht untereinander ausgeführt werden können. Gemeinsam genutzte Linux-Bibliotheken sind nicht dasselbe wie Windows-DLLs.
Die systemübergreifende Ausführung wird auf eine der folgenden Arten erreicht:
- Neukompilierung für das Zielsystem (viele Compiler können auf System A für die Ausführung auf B kompilieren)
- Läuft auf einem Emulator, wie zum Beispiel WEIN, CrossOver und andere
- Ausführung in einer virtuellen Maschine, Windows-Subsystem für Linux (WSL), Docker oder ähnlichem.
Antwort2
Nein. Das ausführbare Format von Linux ist nicht mit Windows kompatibel. Sie müssten das Programm für Windows neu kompilieren.
Alternativ können Sie das Programm nativ im Windows-Subsystem für Linux oder in einer virtuellen Maschine unter Linux ausführen.