Machen Sie sich keine Sorgen, diese Frage wird wahrscheinlich naiv und / oder dumm erscheinen, da ich relativ neu in der Funktionsweise von Unix-ähnlichen Systemen und der Programmierung im Allgemeinen bin.
Bereit? Okay! Ich werde ungefähr 3 Levels von Ludicrosity durchlaufen, die mit der Zeit zunehmen.
Wir haben zwei Systeme mit ähnlicher Hardware (hauptsächlich der Prozessor, sagen wir ein Standard Intel Core 2 Duo).
Eine läuft (fügen Sie Ihre Linux-Distribution hier ein: Ubuntu wird von nun an verwendet), und die andere läuft, sagen wir Mac OS X.
Man kompiliert ein äquivalentes Programm. Sagen wir so etwas wie:
int main()
{
int cat = 33;
int dog = 5*cat;
return dog;
}
Der Code ist extrem einfach, da ich die Auswirkungen von gemeinsam genutzten Bibliotheken noch nicht berücksichtigen möchte.
Bei der Kompilierung auf den jeweiligen Systemen. Ist der Hauptunterschied zwischen der Ausgabe nicht eine Frage von ELF und Mach-O? Wenn man jede Binärdatei von der Formatierung trennen und dabei eine flache Binärdatei belassen würde, wären die Anweisungen für die zerlegte Maschine dann nicht dieselben? (mit vielleicht ein paar Unterschieden, abhängig von den Gewohnheiten / Tendenzen des Compilers).
1.) Wenn man ein Programm entwickeln würde, um die flache Binärdatei, die von unserem Ubuntu-System erzeugt wird, in der Mach-O-Formatierung neu zu packen, würde es auf dem Mac OS X-System laufen? Wenn man dann nur die kompilierte Binärdatei des oben genannten vermeintlichen Programms und dieses mystische Tool zum erneuten Packen von Flat-Binaries hätte, könnten dann einfache Programme auf dem Mac OS X-System ausgeführt werden?
Lassen Sie es uns noch etwas weiter gehen.
Wir haben jetzt ein Programm mit Quellen wie:
#include <stdio.h>
int main()
{
printf("I like tortoises, but not porpoises");
return 0;
}
2.) Unter der Annahme, dass dieses Programm kompiliert und statisch verknüpft ist, könnte unser magisches Programm die rohe Binärdatei immer noch im Mach-O-Format neu packen und auf Mac OS X funktionieren? Da es sich nicht um andere Binärdateien handeln müsste (für die das Mac-System in diesem Fall keine benötigt)
Und jetzt zum letzten Level.
3.) Was wäre, wenn wir mit diesem vermeintlichen Programm alle erforderlichen gemeinsam genutzten Bibliotheken in das Mach-O-Format konvertieren und stattdessen das obige Programm mit dynamischer Verknüpfung kompilieren würden? Würde das Programm weiterhin erfolgreich ausgeführt?
Das sollte es vorerst sein, offensichtlich beruht jeder Schritt der Absurdität auf der vorherigen Basis, um überhaupt einen Sinn zu ergeben. Wenn also die allererste Säule zerstört wird, bezweifle ich, dass die verbleibenden Ebenen viel wert sind.
Ich würde definitiv nicht einmal so weit gehen, daran zu denken, wenn ich an Programme mit grafischer Benutzeroberfläche denke. Fenstersysteme würden wahrscheinlich ganz andere Kopfschmerzen bereiten. Gegenwärtig werden nur Befehlszeilenprogramme berücksichtigt.
Jetzt lade ich die Welt ein, mich zu korrigieren und mir alles zu sagen, was mit meiner absurden Denkweise nicht stimmt.