it-swarm.com.de

Windows C ++ - Compiler mit vollständiger C ++ 11-Unterstützung (sollte mit Qt funktionieren)

Welcher C++ - Compiler unterstützt derzeit vollständig C++ 11 auf Windows-Plattformen?

Der Microsoft-Compiler bietet derzeit keine vollständige C++ 11-Unterstützung (und wird demnächst nicht hinzugefügt).
MinGW g ++ (von mingw.org) unterstützt standardmäßig nicht std::thread. Es kann auch keine Qt 4-Quellen kompilieren (während der Erstellung von QtGuid4.dll ist nicht genügend Speicher verfügbar, bekannte Problemumgehungen haben bei mir nicht funktioniert).
Ich habe mehrere Tage damit verbracht, Clang für Windows zum Laufen zu bringen, habe es geschafft, es zu kompilieren, konnte aber die Unterstützung für C++ 11 nicht aktivieren, da dafür libstdc ++ erforderlich war, das (glaube ich) nicht auf die Windows-Plattform portiert war in diesem Moment. Es wird auch nicht von Qt 4 unterstützt.

Was gibt es noch? Ich arbeite schon seit langer Zeit für C++ 03 und möchte neuen Funktionen eine Wendung geben, aber ich möchte nicht wirklich ein Tool mit unvollständiger Unterstützung (das zusätzliche Kopfschmerzen beim Schreiben einer Code) oder es ist zu wenig Speicher (auf einem 8-GB-System) verfügbar, während eine Bibliothek verknüpft wird.

Ich arbeite an Windows 7 64-Bit und obwohl 64-Bit-Unterstützung eine gute Sache wäre, bin ich hauptsächlich an 32-Bit-Anwendungen interessiert. Daher ist die Möglichkeit, ausführbare 64-Bit-Dateien zu erstellen, optional.

Irgendwelche Vorschläge?

51
SigTerm

Siehe zunächst Stand der experimentellen C++ 11-Unterstützung in GCC 4.8. Nur ein Vorschlag ist noch nicht offiziell umgesetzt. Dann werfen Sie einen Blick auf Implementierungsstatus von C++ 11 in libstdc++. Wie Sie sehen, sind einige Funktionen noch nicht implementiert. Dennoch können wir feststellen, dass die C++ 11-Unterstützung in GCC mehr oder weniger vollständig und verwendbar ist.

Nun zu Windows: wahrscheinlich definitiv der beste native (nicht Cygwin!) Port von GCC , was ich persönlich als Produktionsqualität betrachte, ist MinGW-w64. Sie können es herunterladen hier. Die aktuelle (zum Zeitpunkt des Schreibens aktuelle) Version basiert auf GCC 4.8.2. Es hat bereits Unterstützung für std::thread. Darüber hinaus bietet es alle möglichen Variationen:

  • 64-Bit-Ziele;
  • 32-Bit-Ziele;
  • Win32-Threads;
  • POSIX-Threads;
  • SEH-Ausnahmen;
  • DWARF-Ausnahmen;
  • SJLJ-Ausnahmen.

HINWEIS:
Seien Sie vorsichtig bei der Auswahl der herunterzuladenden Distribution: Damit std::thread Verfügbar ist, benötigen Sie die Distribution mit POSIX-Threads.

Außerdem bestätige ich, dass ich Qt 4.8.4 und 4.8.5 mehrfach selbst erstellt habe und mit dieser Toolchain sogar 64-Bit-Ziele anvisiere. Aber das ist noch nicht alles, hier ist eine Liste einiger Highlights, die ich persönlich mit MinGW-w64 erstellt habe:

Ich denke, dass es eine wunderbare Leistung des MinGW-w64-Entwicklerteams ist, so große und vielfältige Codebasen wie 64-Bit-Ziele mit gutem alten GCC für Windows zu erstellen. Es beweist einmal mehr die Qualität der Toolchain.

Qt 5


Ich habe kürzlich Qt 5.1.1 mit MinGW-w64 4.8.2 für x64 erstellt. Alles in allem lief es ziemlich reibungslos, aber es gibt ein paar kleinere Probleme, die vor dem Build behoben werden müssen. Ich habe alle erforderlichen Patches sorgfältig gesammelt und den gesamten Prozess des Patchens, Erstellens und Installierens mit einem einfachen Batch-Skript automatisiert. Wenn Sie interessiert sind, lesen Sie meine Qt für Windows. Die Verwendung ist so einfach, dass ich Kommentare überspringe und euch einfach das Batch-Skript vorlesen lasse. Denken Sie daran, dass Sie Unix's patch.exe Benötigen, um die Patches anzuwenden, die Sie zum Beispiel von MSYS oder MSYS2 erhalten könnten (siehe unten). Sie können Qt 5.1.1-Quellcode erhalten hier.

HINWEIS:
Scheint nicht mehr sinnvoll, das Rad neu zu erfinden (persönliche Build-Skripte und Patches für Qt zu verwalten). MSYS2 (siehe unten) kümmert sich jetzt um alles. Das heißt, wenn Sie Qt mit verschiedenen Optionen und/oder Flags neu erstellen müssen, bearbeiten Sie einfach die entsprechenden PKGBUILD Datei lokal und verwenden Sie das Dienstprogramm makepkg-mingw entsprechend.

HINWEIS:
Tatsächlich empfiehlt das Qt-Projekt offiziell die Verwendung von MinGW-w64 und MSYS2.

Über MSYS2


Dies wurde nicht direkt gefragt, aber ich möchte es hier hinzufügen, da dies ein Schwesterprojekt von MinGW-w64 ist, und es ist sehr nützlich für alle, die native Software für Windows mit Unix- wie Umwelt.

Diejenigen von Ihnen, die jemals das Original MSYS verwendet haben, wissen wahrscheinlich, wie alt es ist ist. Es wurde seit Ewigkeiten nicht verbessert und alle Unix-Dienstprogramme dort sind bereits schrecklich veraltet.

Jungs, die Builds von MinGW-w64 (oben aufgeführt) bereitstellen, stellen jetzt auch Builds von MSYS2 bereit, die Sie herunterladen können hier. Vor kurzem wurde die Beta-Version beendet. Lesen Sie daher unbedingt die neueste Version. Es wurde sowohl für x86- als auch für x64-Architekturen entwickelt (mit der MinGW-w64-Toolchain selbst). Alle Dienstprogramme werden auf die neuesten Versionen aktualisiert. Zum Beispiel können Sie bereits Dinge genießen wie: Bash 4.2, Make 3.99, Git 1.8.4 und viele mehr; welche laufen nativ unter Windows out of the box!

HINWEIS:
Überprüfen Sie unbedingt deren Wiki, um einen reibungslosen Start zu gewährleisten.

Eine Kurzgeschichte jenseits von MinGW-w64


Das ursprüngliche MinGW war bei Verbesserungen sehr langsam, und die Entwickler haben nicht einmal in Betracht gezogen, 64-Bit-Zielgenerierungsunterstützung hinzuzufügen. Ein ehrgeiziger Mann, Kai Tietz, übernahm es und gabelte es, da sein Unternehmen 64-Bit-Ziele unter Windows erstellen musste. So entstand das MinGW-w64-Projekt. Obwohl das primäre Ziel darin bestand, 64-Bit-Unterstützung hinzuzufügen, haben die Entwickler die Toolchain in vielerlei Hinsicht verbessert und zahlreiche andere Probleme behoben. Seitdem ist das MinGW-w64-Projekt gewachsen und MinGW qualitativ weit voraus. Als MinGW-w64 MinGW vorschlug, sich den Häusern anzuschließen und zusammenzuarbeiten, zeigten die Entwickler von MinGW eine unzureichende Reaktion und weigerten sich zu kooperieren. Infolgedessen gibt es heute 2 Projekte mit ähnlichen Namen, was manchmal Verwirrung stiftet, aber die Unterschiede in Qualität und Support sprechen für sich.

65

Die Kernsprache von Clang 3.3 und GCC 4.8.1 ist bereits vollständig C++ 11-konform (ob sie fehlerfrei sind, ist ein weiteres Thema). In Bezug auf die Bibliothek (STL) ist Clang 3.3 (mit libc ++, aber Sie wissen, dass libc ++ noch nicht unter Windows und Linux verwendet werden kann) die einzige Plattform, die vollständig mit C++ 11 kompatibel ist.

MSVC, die neueste Version von Visual C++ 2013 (derzeit RC), wird in 2 Tagen RTM und allgemein verfügbar ab 13. November) für C++ 11 in beiden Hauptsprachen und deutlich besser unterstützt STL, dachte noch nicht vollständig. STL weise, afaik, es ist vollständig.

Ich denke, das hängt davon ab, welche Funktion Ihre Codes wirklich verwenden. Wurden alle neuen Funktionen von C++ 11 genutzt? Wenn der Funktionsumfang von Visual C++ 2013 Sie zufrieden stellen kann, versuchen Sie es. Ansonsten hat clang bereits einen Windows-Port zur Verfügung gestellt, der sich in Visual Studio integrieren lässt und mit einer bereits vorhandenen (beanspruchten) nativen (msvc c ++ - Laufzeit-) Bibliothek verknüpft werden kann. Ich denke, Sie können ihn auch testen.

Addition: Visual C++ 11/14 Conformance Fahrplan https://udta1g.blu.livefilestore.com/y2pMXBJL7l2a5UOf_pXnLXghSUhPWK8w5skFyc50SVFcMjVwa1guQnM6R0NNLN1buBUNPGbLBejpYXXBXSbqshQKKWVfQxvJjk2jGRPPbL-UBu7gaao4RxifZgPXY5ksdei/image1.png?psid=1

8
JC_Yang

Clang unterstützt Windows vollständig (Modulo-Windows-Standardbibliothek-Fehler in libc ++). Sie können einen "offiziellen" Windows-Build von Clang 3.3 hier herunterladen: http://www.llvm.org/builds/

Da libc ++ nicht enthalten ist, müssen Sie entweder diese oder die Standardbibliothek Ihrer Wahl herunterladen. Ich würde empfehlen, wenn möglich libc ++ zu verwenden, da dies derzeit die vollständigste Bibliotheksimplementierung ist, obwohl ich nicht weiß, wie gut es unter Windows funktioniert.

0