51 votes

Compilateur C++ Windows avec support complet de C++11 (devrait fonctionner avec Qt)

Quel compilateur C++ possède actuellement complet Support de C++11 sur la plateforme Windows ?

Le compilateur de Microsoft ne dispose pas actuellement d'un support complet de C++11 (et il ne sera pas ajouté de sitôt).
MinGW g++ (de mingw.org) ne supporte pas std::thread hors de la boîte. Il ne peut pas non plus compiler les sources de Qt 4 (il manque de mémoire lors de la construction de QtGuid4.dll, les solutions de contournement connues n'ont pas fonctionné pour moi).
J'ai passé plusieurs jours à essayer de faire fonctionner clang sous Windows, j'ai réussi à le compiler, mais je n'ai pas pu activer le support c++11 parce qu'il nécessitait libstdc++ qui (je pense) n'a pas été porté sur la plateforme Windows à ce moment-là. Il n'est pas non plus supporté par Qt 4.

Qu'y a-t-il d'autre ? Je travaille pour C++03 depuis longtemps, et j'aimerais bien essayer les nouvelles fonctionnalités, mais je ne veux pas vraiment d'un outil dont le support est incomplet (ce qui ajouterait un mal de tête supplémentaire lors de l'écriture d'un code) ou qui peut manquer de mémoire (sur un système de 8 Go) lors de la liaison d'une bibliothèque.

Je travaille sur Windows 7 64 bits, et bien que le support 64 bits soit une bonne chose, je suis surtout intéressé par les applications 32 bits, donc la capacité de produire des exécutables 64 bits est facultative.

Des suggestions ?

65voto

Haroogan Points 6159

Tout d'abord, voir Statut du support expérimental de C++11 dans GCC 4.8 . Une seule proposition n'est pas encore officiellement mise en œuvre. Ensuite, jetez un coup d'œil à État d'avancement de la mise en œuvre de C++11 dans libstdc++ . Comme vous pouvez le constater, certaines fonctionnalités doivent encore être mises en œuvre. Néanmoins, nous pouvons affirmer que le support de C++11 dans GCC est plus ou moins complet et utilisable.

Maintenant, en ce qui concerne Windows : probablement le meilleur portage de GCC que je considère personnellement comme une qualité de production est MinGW-w64 . Vous pouvez le télécharger aquí . La dernière version actuelle est basée sur GCC 4.8.1 (4.8.2 sort cette semaine je pense). Elle supporte déjà std::thread . De plus, il offre toutes les variations possibles :

  • Cibles 64 bits ;
  • Cibles 32 bits ;
  • Win32 threads ;
  • Les threads POSIX ;
  • Exceptions SEH ;
  • Les exceptions DWARF ;
  • Exceptions SJLJ.

NOTE : Soyez prudent lors du choix de la distribution à télécharger : pour le std::thread pour fonctionner vous avez besoin de celui avec les threads POSIX.

De plus, je confirme que j'ai construit moi-même Qt 4.8.4 et 4.8.5 de nombreuses fois et que j'ai même ciblé le 64 bits avec cette chaîne d'outils. Mais ce n'est pas tout, voici une liste de quelques points forts que j'ai personnellement construit avec MinGW-w64 jusqu'à présent :

Je pense qu'être capable de construire des bases de code aussi énormes et diverses que des cibles 64 bits avec le bon vieux GCC pour Windows est un exploit miraculeux de l'équipe de développement de MinGW-w64. Cela prouve une fois de plus la qualité de la chaîne d'outils.

Qt 5


J'ai récemment construit Qt 5.1.1 en utilisant MinGW-w64 4.8.2 pour x64. Dans l'ensemble, cela s'est bien passé, mais il y a quelques problèmes mineurs qui doivent être corrigés avant la construction. J'ai gentiment collecté tous les patchs nécessaires et automatisé tout le processus de Parcheando, construction et installation avec un simple batch Parcheando. Si vous êtes intéressé, regardez mon Qt pour Windows . L'utilisation est si simple que je ne la commenterai pas et vous laisserai simplement lire le batch script. Gardez à l'esprit que vous avez besoin de la fonction patch.exe pour appliquer les correctifs que vous pouvez obtenir, par exemple, de MSYS ou MSYS2. Vous pouvez obtenir le code source de Qt 5.1.1 aquí .

NOTE : Je n'ai pas encore vérifié Qt 5.2.0, mais je mettrai cette réponse à jour lorsque je l'aurai fait.

À propos de MSYS2


Cette question n'a pas été posée directement, mais j'ai envie de l'ajouter ici car c'est un projet frère de MinGW-w64, et il est très utile pour tous ceux qui doivent développer des logiciels dans l'environnement Windows et qui regrettent Unix.

Ceux d'entre vous qui ont déjà utilisé l'original MSYS savent probablement quel âge ça a. Il n'a pas été amélioré depuis des lustres, et tous les utilitaires Unix qui s'y trouvent sont déjà terriblement dépassés.

Les gars qui fournissent des builds de MinGW-w64 (listés ci-dessus), fournissent maintenant aussi des builds de MSYS2 que vous pouvez télécharger aquí . Récemment, il est sorti de la version bêta, alors n'oubliez pas de consulter la dernière version. Il est construit pour les architectures x86 et x64 (avec la chaîne d'outils MinGW-w64 elle-même). Tous les utilitaires sont mis à jour dans leurs dernières versions. Par exemple, vous pouvez déjà profiter de choses comme : Bash 4.2, Make 3.99, Git 1.8.4, et bien d'autres encore, qui fonctionnent en mode natif sous Windows !

Une histoire courte au-delà de MinGW-w64


L'original MinGW a été très lent à s'améliorer, et ses développeurs n'ont même pas envisagé d'ajouter la prise en charge de la génération de cibles 64 bits. Un type ambitieux, Kai Tietz, l'a repris et l'a bifurqué car son entreprise avait besoin de construire des cibles 64 bits sous Windows. C'est ainsi que le projet MinGW-w64 est né. Bien que l'objectif premier était d'ajouter le support 64 bits, les développeurs ont amélioré la chaîne d'outils sous de nombreux aspects et ont traité un grand nombre d'autres problèmes. Depuis lors, le projet MinGW-w64 s'est développé et est maintenant loin devant MinGW en termes de qualité. Lorsque MinGW-w64 a proposé à MinGW de rejoindre les maisons et travailler ensemble, les développeurs de MinGW ont montré une réaction inadéquate et ont refusé de coopérer. En conséquence, il existe aujourd'hui 2 projets au nom similaire, ce qui prête parfois à confusion, mais les différences de qualité et de support parlent d'elles-mêmes.

8voto

user2890461 Points 91

En ce qui concerne le langage de base, Clang 3.3 et GCC 4.8.1 sont déjà entièrement conformes à C++11 (l'absence de bogues est un autre sujet). En ce qui concerne les bibliothèques (STL), Clang 3.3 (avec libc++, mais vous savez, libc++ n'est pas encore utilisable sous Windows et Linux) est la seule plate-forme entièrement conforme à C++11.

MSVC, le plus récent, Visual C++2013 (actuellement RC, sera RTM dans 2 jours et disponible en général en novembre 13) fournit un bien meilleur support pour C++11 à la fois dans le langage de base et la STL, mais pas encore complet. En ce qui concerne la STL, je crois qu'elle est complète.

Je pense que cela dépend de la fonctionnalité que vos codes utilisent vraiment. Toutes les nouvelles fonctionnalités de C++11 ont-elles été utilisées ? Si l'ensemble des fonctionnalités de Visual C++2013 peut vous satisfaire, essayez-le. Sinon, clang a déjà fourni un portage Windows qui peut s'intégrer à Visual Studio, et peut se lier à la bibliothèque native (msvc c++ runtime) déjà (revendiqué), je pense que vous pouvez également lui donner un essai.

Ajout : Feuille de route pour la conformité à Visual C++11/14 https://udta1g.blu.livefilestore.com/y2pMXBJL7l2a5UOf_pXnLXghSUhPWK8w5skFyc50SVFcMjVwa1guQnM6R0NNLN1buBUNPGbLBejpYXXBXSbqshQKKWVfQxvJjk2jGRPPbL-UBu7gaao4RxifZgPXY5ksdei/image1.png?psid=1

0voto

Clang a un support complet de Windows (modulo les bogues de la bibliothèque standard Windows dans libc++). Vous pouvez télécharger une version "officielle" de clang 3.3 pour Windows ici : http://www.llvm.org/builds/

Il n'inclut pas libc++, vous devrez donc télécharger soit cette bibliothèque, soit la bibliothèque standard de votre choix. Je vous recommande d'utiliser libc++ si possible, car c'est actuellement l'implémentation la plus complète de la bibliothèque, bien que je ne sache pas si elle fonctionne bien sous Windows.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X