2017-02-02 14 views
5

Ich verwende derzeit Windows 8.1 und wollte GCC installieren. Ich fand heraus, dass die Wege dazu durch MinGW und CygWin (die beliebtesten) sind. Jetzt habe ich auf dem Windows-Subsystem für Linux kam (WSL) und Bash angeboten unter Windows in Windows 10.GCC unter Windows - Bash unter Ubuntu unter Windows (WSL), CygWin, MinGW

Frage 1., ob es möglich ist, GCC durch die Bash in Windows 10 installiert zu sein, und wird es funktionieren wie bei einer Linux-Distribution. Sagen Sie bitte eine ‚HelloWorld.c‘ Datei haben, und wenn ich es tue,

>  gcc helloworld.c 
$  ./a 

in der Bash würde ich die Ausgabe (nehmen, den Inhalt von ‚HelloWorld.c‘ bekommen, einfach zu sein - ein cout statment.)

Frage 2. Wenn es dann möglich ist, welche der Methoden wird bevorzugt, GCC unter Windows zu verwenden. Das heißt, a) MinGW oder CygWin b) Bash unter Linux unter Windows. Da basierend auf dem, was ich verstanden habe, was ich gelesen habe, verursacht CygWin und MinGW einige Abhängigkeiten von Programmen, die auf ihnen entwickelt wurden.

Frage 3. Wenn Sie so weit gelesen haben dann füllen Sie bitte meine Lücke in Verständnis über CygWin und MinGW. Das heißt, wenn ich es nur zum Kompilieren und Ausführen von Code-Stücken und nicht zur Anwendungsentwicklung verwende, ist es egal, welche davon ich verwende, habe ich recht? Da der Code (in C oder FORTRAN geschrieben), kompilieren und ausführen unabhängig vom System, habe ich Recht?

Kontext. Ich bin ein Student, der an numerischen Berechnungen (Computational Fluid Dynamics) arbeitet, und meine Hauptaufgabe besteht darin, CFD-Codes in FORTRAN zu entwickeln und auszuführen. Was ich tun möchte, ist die Arbeit an dem Computer-Code (für den wir hauptsächlich FORTRAN verwenden) auf meinem Laptop, der unter Windows läuft. Und ich bin nicht im Begriff, Anwendungen oder Software für Windows oder Linux im Moment zu entwickeln. Aber ich würde trotzdem gerne wissen, wie die Dinge funktionieren und welche die beste Option ist. Bitte erläutern Sie ausführlich. Danke.

Antwort

3

Um Ihre erste Frage zu beantworten, ja, können Sie das unter WSL kompilieren.

Um Ihre anderen Fragen zu beantworten, schauen wir uns MinGW an. Dies ist, was der Wikipedia-Eintrag für MinGW sagt:

MinGW wurde gespalten von Version 1.3.3 von Cygwin. [5] Obwohl sowohl Cygwin als auch MinGW verwendet werden können, um Unix-Software nach Windows zu portieren, haben sie unterschiedliche Ansätze: [16] Cygwin zielt darauf ab, eine vollständige POSIX-Schicht mit einer vollständigen Implementierung aller wichtigen Unix-Systemaufrufe und -bibliotheken bereitzustellen. Kompatibilität wird als höhere Priorität angesehen als Leistung. Auf der anderen Seite sind die Prioritäten von MinGW Einfachheit und Leistung. Daher stellt es bestimmte POSIX-APIs nicht bereit, die nicht einfach mit der Windows-API implementiert werden können, wie z. B. fork(), mmap() und ioctl(). [16] Anwendungen, die mit einer plattformübergreifenden Bibliothek geschrieben wurden, die selbst nach MinGW portiert wurde, wie z. B. SDL, wxWidgets, Qt oder GTK +, kompilieren normalerweise so einfach in MinGW wie in Cygwin.

Mit Cygwin geschriebene Windows-Programme laufen auf einer Copyleft-Kompatibilitäts-DLL, die mit dem Programm zusammen mit dem Quellcode des Programms verteilt werden muss. MinGW erfordert keine Kompatibilitätsebene, da MinGW-basierte Programme mit direkten Aufrufen von Windows-APIs kompiliert werden.

(https://en.wikipedia.org/wiki/MinGW)

Dies ist, was die MinGW Webseite (http://www.mingw.org) sagt:

MinGW, eine Zusammenziehung von "Minimalist GNU for Windows" ist eine minimalistische Entwicklungsumgebung für native Microsoft Windows-Anwendungen.

MinGW stellt eine vollständige Open Source-Programmierumgebung zur Verfügung, die für die Entwicklung nativer MS-Windows-Anwendungen geeignet ist und nicht von C-Runtime-DLLs anderer Hersteller abhängt. (Es hängt von einer Anzahl von DLLs ab, die von Microsoft selbst als Komponenten des Betriebssystems bereitgestellt werden; am bemerkenswertesten ist MSVCRT.DLL, die Microsoft C-Laufzeitbibliothek. Außerdem müssen Thread-Anwendungen mit einer frei verteilbaren Thread-Unterstützungs-DLL ausgeliefert werden. als Teil von MinGW selbst bereitgestellt).

MinGW-Compiler bieten Zugriff auf die Funktionalität der Microsoft-C-Laufzeit und einige sprachspezifische Laufzeiten. MinGW, minimalistisch, wird und wird niemals versuchen, eine POSIX-Laufzeitumgebung für die POSIX-Anwendungsbereitstellung auf MS-Windows bereitzustellen. Wenn Sie eine POSIX-Anwendungsbereitstellung auf dieser Plattform wünschen, beachten Sie stattdessen Cygwin.

Ich bin vertraut mit WSL und Cygwin mehr als MinGW. Soweit ich weiß, ist MinGW darauf ausgerichtet, einigermaßen portable, leistungsstarke Windows-Binärdateien zu erstellen, während Cygwin eher auf Unix-Benutzer (oder solche, die für Unix/POSIX geschriebene Anwendungen portieren) zielt, die eine Unix-ähnliche Umgebung benötigen Windows mit allem was dazu gehört. Wie Sie angegeben haben, waren Cygwin-Programme zumindest früher für andere, die Cygwin nicht installiert hatten, weniger leicht verteilbar (aufgrund von Lizenzüberlegungen, aber siehe unten stehenden Link). MinGW-Programme werden als native Windows-Programme mit nicht dokumentierten nativen Windows-Bibliotheken ausgeführt. WSL-Binärdateien laufen nicht unter Windows selbst; Sie laufen nur in der WSL-Umgebung (oder möglicherweise in nativen Linux-Systemen). WSL ordnet Linux-Kernel-Aufrufe Windows-Kernelaufrufen zu, während Cygwin Unix/Posix-Bibliotheksaufrufe implementiert. WSL setzt zur Bereitstellung seiner Umgebung auf eine echte Linux-Distribution, während Cygwin auf eine eigene Umgebung angewiesen ist. (WSL hat den Vorteil, dass vorhandene Binärdateien ohne erneute Kompilierung ausgeführt werden.) Ich denke nicht, dass Ihnen das alles zu wichtig ist, weil Sie nicht vorhaben, Ihre Binärdateien zu verteilen. Sie wollen hohe Leistung. Laut Wikipedia ist MinGW eine höhere Leistung als Cygwin, aber es ist auch 32-Bit, was ein Problem mit Ihren Anwendungen sein kann. Es gibt eine 64-Bit-Umgebung, die MinGW ähnelt, aber es ist ein anderes Projekt.

Eine wichtige Überlegung ist, ob Sie Windows-Code oder Unix/Linux/POSIX-Code schreiben möchten. MinGW ist für die Entwicklung von Windows-Anwendungen mit Windows-APIs (obwohl Sie einige begrenzte POSIX-Unterstützung einklappen können); WSL und Cygwin sind für die Entwicklung von Unix/Linux/POSIX-Anwendungen zuständig. Dies ist aus Gründen der Portabilität wichtig. Aber wenn Sie die Art von Programmen entwickeln, von denen ich denke, dass Sie sie sind, fast alle geradlinigen Berechnungen und sehr wenig Phantasie I/O, kann es nur auf persönliche Vorliebe oder Bequemlichkeit herunterkochen. Wenn Sie ein kleines, repräsentatives Programm erstellen können, das viel Zeit in Anspruch nimmt und es in jeder Umgebung ausführt, können Sie herausfinden, welche die beste Leistung hat. Das hängt davon ab, dass ich an Ihren eigenen Betriebsmix denke.

Siehe auch What is the difference between Cygwin and MinGW?

+0

Danke für die umfassende Antwort. Das hat nicht nur meine Fragen beantwortet, sondern auch mein Verständnis über diese Werkzeuge gefördert. Danke auch für den Vorschlag. – Rithwik

+0

MinGW-w64 ist in jeder Hinsicht der Nachfolger der MinGW.org-Version. Sie bieten 32- und 64-Bit-Compiler sowie einige Arm-Unterstützung. Sie bieten eine viel bessere Abdeckung moderner Windows-APIs, einschließlich Windows App-bezogenen Dingen.Was ich damit sagen möchte, ist, nur Toolchains zu verwenden, die darauf basieren. Verschwenden Sie keine Zeit damit herauszufinden, warum Ihr MinGW-Compiler aus irgendeinem mysteriösen Grund nicht funktioniert. – rubenvb

+0

@rubenvb Haha. Ich war auf MinGW-w64 gestoßen, war mir aber nicht sicher. Danke für den Tipp. – Rithwik

Verwandte Themen