Je ne suis pas un développeur C++, mais j'ai toujours été intéressé par les compilateurs, et je suis intéressé à bricoler avec certains de la GCC trucs (notamment LLVM).
Sur Windows, GCC requiert une POSIX-couche d'émulation (cygwin ou MinGW) pour s'exécuter correctement.
Pourquoi est-ce?
J'utilise beaucoup d'autres logiciels, écrit en C++ et compilé de manière croisée pour différentes plates-formes (Subversion, Firefox, Apache, MySQL), et aucun d'entre eux nécessitent cygwin ou MinGW.
Ma compréhension sur le C++ de meilleures pratiques de programmation, c'est que vous pouvez écrire raisonnablement la plate-forme neutre de code et de traiter de toutes les différences, pendant le processus de compilation.
Alors, quel est le problème avec GCC? Pourquoi ne peut-il pas s'exécuter en mode natif sur Windows?
EDIT:
D'accord, les deux réponses à ce jour-dire, en gros, "GCC utilise la couche posix, car il utilise la posix en-têtes".
Mais ce n'est pas vraiment répondre à la question.
Disons que j'ai déjà un jeu d'en-têtes de mes préférés de la bibliothèque standard. Pourquoi ai-je toujours besoin de la posix en-têtes?
Ne GCC besoin cygwin/mingw à fait EXÉCUTER?
Ou est-il seulement besoin de la couche d'émulation pour les en-têtes et les bibliothèques? Si oui, pourquoi ne puis-je pas juste lui donner un "lib", avec les ressources nécessaires?
MODIFIER À NOUVEAU:
Ok, je vais essayer à nouveau pour clarifier la question...
J'ai aussi écrire du code dans le D Langage de Programmation. L'officiel du compilateur est nommé "dmd" et il y a de officiel compilateur de fichiers binaires pour Windows et linux.
La version Windows n'a pas besoin de toute sorte d'émulation POSIX. Et la version Linux n'a pas besoin de tout type de Win32 émulation. Si le compilateur a des hypothèses au sujet de son environnement, il se cache ces hypothèses assez bien.
Bien sûr, je dois indiquer au compilateur où trouver de la bibliothèque standard et où trouver les bibliothèques statiquement ou dynamiquement lien contre.
GCC, par contre, insiste sur la nécessité de faire semblant qu'il fonctionne dans un environnement posix, et il ME demande de l'humour de ces hypothèses par la mise en place d'une couche d'émulation.
Mais quoi, exactement, dans GCC s'appuie sur la couche? Est-il tout simplement à la recherche pour stdlib en-têtes, et elle l'assume trouverez les en-têtes dans "/usr/lib"?
Si c'est le cas, ne devrais-je pas simplement être en mesure de lui dire de regarder dans "C:/gcc/lib" pour trouver les fichiers d'en-tête?
Ou ne GCC lui-même reposent sur les normes POSIX bibliothèques pour accéder au système de fichiers (et pour d'autres choses)? Si c'est le cas, alors je me demande pourquoi ils ne se contentent pas de manière statique lien avec leur favori windows POSIX bibliothèques. Pourquoi demander à l'utilisateur de configurer les dépendances, quand ils ont pu construire ces dépendances à droite dans l'application?