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?
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
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
@rubenvb Haha. Ich war auf MinGW-w64 gestoßen, war mir aber nicht sicher. Danke für den Tipp. – Rithwik