2017-09-10 1 views
0

J'ai déjà lu quelque chose sur la compilation de codes source C/C++ sous Linux pour les exécuter sous Windows. J'ai aussi essayé avec MinGW et tout a bien fonctionné.Compilation de code source C/C++ sous Linux pour différentes plates-formes

Cependant, je ne comprends pas pourquoi je dois utiliser MinGW sous Linux pour créer des binaires fonctionnant sous Windows. Qu'est-ce qui rend les sorties g ++ impossibles à exécuter sous Windows? Aussi, qu'est-ce qui rend les sorties g ++ possibles pour les faire tourner sous Linux? Le fichier de sortie a-t-il une structure différente: en-tête, données, etc. et ne peut-il être interprété que par un système d'exploitation spécifique?

Quelqu'un peut-il me l'expliquer? J'apprécierais que l'un d'entre vous m'explique ceci non seulement pour un amateur mais aussi pour une personne qui s'intéresse aux systèmes d'exploitation et aimerait savoir quel est le vrai point derrière cela.

+2

https://en.wikipedia.org/wiki/Comparison_of_executable_file_formats - chaque famille d'OS a ses propres, plus ou moins. –

+0

'Le fichier de sortie a-t-il une structure différente: en-tête, données, etc. et ne peut-il être interprété que par un système d'exploitation spécifique? 'Oui. De plus, l'environnement et les bibliothèques disponibles sont complètement différents (par exemple, ce qui doit être exécuté au démarrage du programme, etcetc.etc.) – deviantfan

+0

Copie possible de [x86 Linux versus Windows?] (Https://stackoverflow.com/questions/19390331/x86-linux-versus-windows) –

Répondre

0

La construction de binaires sur Linux pour Windows revient à une compilation croisée, dans le même sens que la construction de binaires sous Linux, par exemple pour Android. Les machines Windows et Linux peuvent (peut-être) avoir un matériel similaire, mais ce sont des plates-formes d'exploitation très différentes. Qu'est-ce qui se passe au niveau de la plate-forme lorsque vous exécutez quelque chose d'aussi simple que prinf("Hello world") diffère entre les plates-formes. Autrement dit, la façon dont les personnages sont présentés à une console est différente. Il y a des défis encore plus grands quand il s'agit d'appels comme fork(), qui ne correspondent pas vraiment à tout ce que la gestion des processus de Windows fait.

Je crois que même la façon dont le code de programme et les données sont chargées en mémoire est différente entre Windows et Linux, même sur le même matériel.

Il n'y a simplement aucune raison particulière de penser qu'un binaire natif construit pour une plate-forme fonctionnera sur une autre. Avec Java, nous nous sommes habitués à l'idée que le code compilé est multi-plateforme, mais ce qui se passe dans un fichier .class Java n'est pas un code exécutable natif - nous nous appuyons sur le système d'exécution Java pour faire le bonne chose au niveau de la plate-forme. Avec le C/C++, nous avons besoin des outils de construction pour cela (et très souvent aussi de l'expertise des programmeurs).