web-dev-qa-db-fra.com

Compilateur C ++ Windows avec prise en charge complète de C ++ 11 (devrait fonctionner avec Qt)

Quel compilateur C++ prend actuellement en charge complet C++ 11 sur la plate-forme Windows?

Le compilateur Microsoft ne prend pas en charge actuellement C++ 11 (et il ne sera pas ajouté de sitôt).
MinGW g ++ (de mingw.org) ne prend pas en charge std::thread hors de la boîte. Il ne peut pas non plus compiler les sources de Qt 4 (manque de mémoire lors de la construction de QtGuid4.dll, les solutions de contournement connues ne fonctionnaient pas pour moi).
J'ai perdu plusieurs jours à essayer de faire fonctionner Clang sur Windows, j'ai réussi à le compiler, mais je n'ai pas pu activer la prise en charge de C++ 11 car il nécessitait libstdc ++ qui (je pense) n'était pas porté sur la plate-forme Windows à ce moment là. Il n'est également pas pris en charge par Qt 4.

Qu'y a-t-il d'autre? Je travaille depuis longtemps sur C++ 03, et j'aimerais donner un coup de fouet aux nouvelles fonctionnalités, mais je ne veux pas vraiment d'un outil avec un support incomplet (qui ajoutera des maux de tête supplémentaires lors de l'écriture d'un code) ou 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 même si avoir un support 64 bits serait bien, je suis principalement intéressé par les applications 32 bits, donc la possibilité de produire des exécutables 64 bits est facultative.

Aucune suggestion?

51
SigTerm

Tout d'abord, voir Status of Experimental C++ 11 Support in GCC 4.8. Une seule proposition n'est pas encore officiellement mise en œuvre. Ensuite, jetez un œil à État d'implémentation de C++ 11 dans libstdc++. Comme vous pouvez le voir, certaines fonctionnalités doivent encore être implémentées. Néanmoins, nous pouvons affirmer que le support C++ 11 dans GCC est plus ou moins complet et utilisable.

Maintenant, concernant Windows: probablement certainement le meilleur natif (pas Cygwin!) port de GCC , que je considère personnellement comme une qualité de production, est MinGW-w64. Vous pouvez le télécharger ici. La dernière version actuelle (au moment de la rédaction) est basée sur GCC 4.8.2. Il prend déjà en charge std::thread. De plus, il offre toutes les variantes possibles:

  • Cibles 64 bits;
  • Cibles 32 bits;
  • Threads Win32;
  • Fils POSIX;
  • Exceptions SEH;
  • Exceptions DWARF;
  • Exceptions SJLJ.

REMARQUE:
Soyez prudent lorsque vous choisissez la distribution à télécharger: pour que std::thread Soit disponible, vous avez besoin de celle avec les threads POSIX.

De plus, je confirme que j'ai moi-même construit Qt 4.8.4 et 4.8.5 plusieurs fois et même ciblé 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 construits avec MinGW-w64 jusqu'à présent:

Je pense que pouvoir construire des bases de code aussi énormes et diverses que des cibles 64 bits avec un bon vieux GCC pour Windows est une réalisation miraculeuse de l'équipe de développeurs 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 ciblant x64. Dans l'ensemble, cela s'est plutôt bien passé, mais il y a quelques problèmes mineurs qui doivent être corrigés avant la construction. J'ai doucement collecté tous les correctifs requis et automatisé l'ensemble du processus de correction, de construction et d'installation avec un simple script de traitement par lots. Si vous êtes intéressé, consultez mon Qt pour Windows. L'utilisation est si simple que je vais sauter les commentaires et vous laisser simplement lire le script batch. Gardez à l'esprit que vous avez besoin du patch.exe D'Unix pour appliquer les correctifs que vous pourriez obtenir, par exemple, de MSYS ou MSYS2 (voir ci-dessous). Vous pouvez obtenir le code source de Qt 5.1.1 ici.

REMARQUE:
Il ne semble plus raisonnable de réinventer la roue (maintenant les scripts de construction personnels et les correctifs pour Qt). MSYS2 (voir ci-dessous) prend désormais en charge tout. C'est-à-dire que si vous avez besoin de reconstruire Qt avec différentes options et/ou drapeaux, modifiez simplement le fichier correspondant PKGBUILD localement et utilisez l'utilitaire makepkg-mingw en conséquence.

REMARQUE:
En fait, le projet Qt recommande officiellement d'utiliser MinGW-w64 et MSYS2.

À propos de MSYS2


Cela n'a pas été demandé directement, mais j'ai envie de l'ajouter ici car il s'agit d'un projet frère de MinGW-w64, et il est très utile pour tous ceux qui doivent développer natif un logiciel pour Windows utilisant Unix- comme l'environnement.

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

Les gars qui fournissent des versions de MinGW-w64 (répertoriées ci-dessus), fournissent désormais également des versions de MSYS2 que vous pouvez télécharger - ici. Récemment, il est sorti de la version bêta, alors assurez-vous de consulter la dernière version. Il est conçu pour les architectures x86 et x64 (avec la chaîne d'outils MinGW-w64 elle-même). Tous les utilitaires sont mis à jour vers 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; qui s'exécutent nativement sur Windows hors de la boîte!

REMARQUE:
Assurez-vous de vérifier leur Wiki pour bien démarrer.

Une courte histoire au-delà de MinGW-w64


L'original MinGW a été très lent sur les améliorations, et ses développeurs n'ont même pas envisagé d'ajouter le support de génération de cible 64 bits. Un gars ambitieux, Kai Tietz, l'a repris et l'a fait car sa société avait besoin de construire des cibles 64 bits sur Windows. C'est ainsi qu'est né le projet MinGW-w64. Bien que l'objectif principal était d'ajouter une prise en charge 64 bits, les développeurs ont amélioré la chaîne d'outils à bien des égards et résolu de nombreux autres problèmes. Depuis lors, le projet MinGW-w64 a grandi et est maintenant loin devant MinGW en termes de qualité. Lorsque MinGW-w64 a proposé à MinGW de rejoindre les maisons et de 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 avec un nom similaire, ce qui cause parfois de la confusion, mais les différences de qualité et de soutien parlent d'elles-mêmes.

65
Alexander Shukaev

En ce qui concerne le langage de base, Clang 3.3 et GCC 4.8.1 sont déjà entièrement conformes à C++ 11 (qu'ils soient exempts de bogues est encore un autre sujet). En ce qui concerne la bibliothèque (STL), Clang 3.3 (avec libc ++, mais vous savez, libc ++ n'est pas encore utilisable à la fois sous windows et linux) est la seule plate-forme entièrement conforme à C++ 11.

MSVC, le dernier, Visual C++ 2013 (actuellement RC, sera RTM dans 2 jours et disponible en général le 13 novembre) fournit un bien meilleur support pour C++ 11 dans le langage principal et STL, pensé pas encore terminé. STL sage, afaik, c'est complet.

Je pense que cela dépend de la fonctionnalité que vos codes utilisent réellement. Toutes les nouvelles fonctionnalités de C++ 11 ont-elles été utilisées? Si l'ensemble de fonctionnalités de Visual C++ 2013 peut vous satisfaire, essayez-le. Sinon, clang a déjà fourni un port Windows qui peut s'intégrer à Visual Studio et peut déjà être lié à la bibliothèque native (exécution msvc c ++) (je pense), je pense que vous pouvez également l'essayer.

Addition: Visual C++ 11/14 feuille de route de conformité https://udta1g.blu.livefilestore.com/y2pMXBJL7l2a5UOf_pXnLXghSUhPWK8w5skFyc50SVFcMjVwa1guQnM6R0NNLN1buBUNPGbLBejpYXXBXSbqshQKKWVfQxvJjk2jGRPPbL-UBu7gaao4RxifZgPXY5ksdei/image1.png?psid=1

8
JC_Yang

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

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

0
Richard Matheson