Ich bin kein C++ - Entwickler, aber ich war schon immer an Compilern interessiert, und ich bin daran interessiert, mit einigen der GCC-Sachen (insbesondere LLVM) zu experimentieren.Warum hängt GCC-Windows von Cygwin ab?
Unter Windows erfordert GCC, dass eine POSIX-Emulationsebene (Cygwin oder MinGW) ordnungsgemäß ausgeführt wird.
Warum ist das?
Ich benutze viele andere Software, in C++ geschrieben und für verschiedene Plattformen (Subversion, Firefox, Apache, MySQL) kompiliert, und keiner von ihnen erfordert Cygwin oder MinGW.
Mein Verständnis von C + + Best-Practice-Programmierung ist, dass Sie vernünftigerweise plattformneutralen Code schreiben und alle Unterschiede während des Kompilierungsprozesses behandeln können.
Also, was ist der Deal mit GCC? Warum kann es nicht nativ unter Windows ausgeführt werden?
EDIT:
Okay, die beiden Antworten bisher sagen, im Grunde, "GCC verwendet die Posix-Schicht, weil es den Posix-Header verwendet".
Aber das beantwortet nicht wirklich die Frage.
Nehmen wir an, ich habe bereits eine Reihe von Headern für meine Lieblings-Standardbibliothek. Warum brauche ich noch die Posix-Header?
Benötigt GCC cygwin/mingw, um tatsächlich RUN?
Oder benötigt es nur die Emulationsschicht für Header und Bibliotheken? Wenn ja, warum kann ich ihm nicht einfach ein "lib" -Verzeichnis mit den erforderlichen Ressourcen geben?
Erneut bearbeiten:
Okay, werde ich versuchen, wieder die Frage zu klären ...
ich auch Code in the D Programming Language schreiben. Der offizielle Compiler heißt "dmd" und es gibt offizielle Compiler-Binärdateien für Windows und Linux.
Die Windows-Version erfordert keine POSIX-Emulation. Und die Linux-Version benötigt keine Win32-Emulation. Wenn der Compiler Annahmen über seine Umgebung hat, verbirgt er diese Annahmen ziemlich gut.
Natürlich muss ich dem Compiler sagen, wo die Standardbibliothek zu finden ist und wo Bibliotheken zu statisch oder dynamisch zu finden sind.
GCC dagegen besteht darauf, so zu tun, als würde es in einer Posix-Umgebung arbeiten, und es fordert mich auf, diese Annahmen zu treffen, indem ich eine Emulationsebene aufstelle.
Aber was genau, innerhalb GCC beruht auf dieser Schicht? Sucht es nur nach stdlib-Headern und geht davon aus, dass es diese Header in "/ usr/lib" finden wird?
Wenn das der Fall ist, sollte ich nicht in der Lage sein, es in "C:/gcc/lib" zu suchen, um diese Header-Dateien zu finden?
Oder ist GCC selbst auf die POSIX-Bibliotheken angewiesen, um auf das Dateisystem zuzugreifen (und andere Low-Level-Sachen zu machen)? Wenn das der Fall ist, dann wundere ich mich, warum sie nicht nur statisch mit ihren Lieblings-Windows-POSIX-Bibliotheken verlinken. Warum muss der Benutzer die Abhängigkeiten einrichten, wenn er diese Abhängigkeiten direkt in die Anwendung einbauen könnte?
Es gibt mehrere * richtige * Antworten zur Auswahl. MinGW benötigt keine cygwin1.dll. Wenn Sie wissen möchten, was das Kern-GCC-Team Microsoft Windows nicht unterstützt, sollten Sie das fragen. –
Nicht zu erwähnen, dass es so viel Sinn wie diese Frage macht: Warum brauchen Sie WINE oder etwas, um Visual Studio und VC++ unter Linux zu betreiben? –