2017-09-10 17 views
0

Ich habe bereits etwas über das Kompilieren von C/C++ - Quellcodes unter Linux gelesen, um sie unter Windows auszuführen. Ich habe das auch mit MinGW versucht und alles hat gut funktioniert.Kompilieren von C/C++ - Quellcode unter Linux für verschiedene Plattformen

Allerdings verstehe ich nicht, warum ich MinGW unter Linux verwenden muss, um Binärdateien zu erstellen, die unter Windows funktionieren. Was macht g ++ - Ausgaben unter Windows unmöglich? Was macht g ++ Ausgaben möglich, um sie unter Linux auszuführen? Hat die Ausgabedatei eine andere Struktur: Header, Daten usw. und können sie nur von einem bestimmten Betriebssystem interpretiert werden?

Kann mir jemand klar machen? Ich würde mich freuen, wenn einer von Ihnen mir das nicht nur als Amateur erklären würde, sondern auch als jemand, der sich für Betriebssysteme interessiert und wissen möchte, was der eigentliche Sinn dahinter ist.

+2

https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats - jede OS-Familie hat ihre eigene, mehr oder weniger. –

+0

'Hat die Ausgabedatei eine andere Struktur: Header, Daten usw. und sie können nur von einem bestimmten Betriebssystem interpretiert werden?' Ja. Und die verfügbare Umgebung und die Bibliotheken sind auch völlig verschieden (zB was beim Programmstart ausgeführt werden muss, etc.etc.etc.) – deviantfan

+0

Mögliches Duplikat von [x86 Linux versus Windows?] (Https://stackoverflow.com/questions/19390331/x86-linux-versus-windows) –

Antwort

0

Die Erstellung von Binärdateien unter Linux für Windows ist ein Cross-Compiling, im gleichen Sinne wie das Erstellen von Binärdateien unter Linux für, sagen wir, Android. Die Windows- und Linux-Maschinen können (vielleicht) ähnliche Hardware haben, aber sie sind sehr unterschiedliche Betriebssysteme.

Was passiert auf der Plattform-Ebene, wenn Sie etwas sogar so einfach wie prinf("Hello world") zwischen Plattformen ausgeführt ausführen. Das heißt, die Art und Weise, in der Charaktere einer Konsole präsentiert werden, ist anders. Bei Anrufen wie fork(), die nicht wirklich der Windows-Prozessverwaltung entsprechen, gibt es noch größere Herausforderungen.

Ich glaube, dass sogar die Art und Weise, wie Programmcode und Daten in den Speicher geladen werden, zwischen Windows und Linux, sogar auf der gleichen Hardware, unterschiedlich ist.

Es gibt keinen besonderen Grund zu der Annahme, dass eine native Binärdatei, die für eine Plattform erstellt wurde, auf einer anderen ausgeführt wird. Mit Java haben wir uns an die Idee gewöhnt, dass kompilierter Code plattformübergreifend ist, aber was in einer Java-.class-Datei steckt, ist kein nativer ausführbarer Code - wir verwenden das Java-Laufzeitsystem Recht auf Plattformebene. Mit C/C++ benötigen wir die Build-Tools (und oft auch ein gewisses Maß an Programmierer-Know-how).

Verwandte Themen