Compilateur Windows c++ avec prise en charge complète de C++11 (devrait fonctionner avec Qt) [fermé]

quel compilateur C++ supporte actuellement complete C++11 sur la plate-forme windows?

Microsoft compiler n'a pas actuellement le support C++11 complet (et il ne sera pas ajouté de sitôt).

MinGW g++ (à partir de mingw.org) ne prend pas en charge std::thread hors de la boîte. Il ne peut pas non plus compiler les sources Qt 4 (il manque de mémoire pendant la construction de QtGuid4.dll, les solutions de rechange connues n'ont pas fonctionné 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 le support c++11 parce qu'il nécessitait libstdc++ qui (je pense) n'était pas porté sur la plate-forme windows à ce moment-là. Il n'est pas non plus pris en charge par Qt 4.

Qu'y a-t-il d'autre? Je travaille pour C++03 depuis longtemps, et j'aimerais donner un coup de fouet aux nouvelles fonctionnalités, mais je ne veux pas vraiment un outil qui 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 le système 8Go) tout en reliant une bibliothèque.

je travaille sur windows 7 64bit, et bien qu'avoir un support 64bit serait bien, je suis surtout intéressé par les applications 32bit, donc la capacité de produire des exécutables 64bit est optionnelle.

des suggestions?

51
demandé sur SigTerm 2013-10-17 15:28:21

3 réponses

tout d'Abord, consultez la section Statut Expérimental de C++11 dans GCC 4.8 . Une seule proposition n'est pas encore officiellement mise en œuvre. Ensuite, regardez État de la mise en œuvre de C++11 dans libstdc++ . Comme vous pouvez le voir, certaines fonctionnalités ne sont pas encore 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 production-qualité, est MinGW-w64 . Vous pouvez le télécharger ici . L'actuelle (au moment de la writing) la dernière version est basée sur GCC 4.8.2. Il a déjà le soutien pour std::thread . De plus, il offre toutes les variantes possibles:

  • cibles 64 bits;
  • cibles 32 bits;
  • Win32 fils;
  • fils POSIX;
  • SEH exceptions;
  • exceptions naines;
  • SJLJ exceptions.

NOTE:

Faites attention en choisissant 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 construit Qt 4.8.4 et 4.8.5 moi-même de nombreuses fois et même en ciblant 64 bits avec cette chaîne d'outils. Mais ce n'est pas tout, voici une liste de quelques faits saillants que J'ai personnellement construits avec MinGW-w64 jusqu'à présent:

diverses bases de code comme des cibles 64 bits avec de bon vieux GCC pour Windows est une réalisation miraculeuse de MinGW-w64 équipe de développement. 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 bien passé, mais il y a quelques problèmes mineurs qui doivent être corrigés avant la construction. J'ai rassemblé délicatement tous les patchs nécessaires et automatisé l'ensemble du processus de correction, la construction, et l'installation avec un simple script de fournée. Si vous êtes intéressé, consultez mon Qt pour Windows . L'usage est si simple que je vais sauter des commentaires sur elle et tout simplement vous laisser lire le script de fournée. 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 Qt 5.1.1 code source ici .

NOTE:

Ne semble pas raisonnable de réinventer la roue (en maintenant des scripts de construction personnels et des correctifs pour Qt). MSYS2 (voir ci-dessous) s'occupe maintenant de tout . C'est-à-dire si vous avez besoin de reconstruire Qt avec différentes options et/ou Drapeaux, alors éditez simplement le PKGBUILD makepkg-mingw utilité en conséquence.

NOTE:

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

à propos de MSYS2


j'ai envie de l'ajouter ici car C'est un projet jumeau de MinGW-w64, et c'est très utile pour quiconque doit développer natif logiciel pour Windows en utilisant un environnement Unix.

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 y sont déjà terriblement dépassés.

les gars qui fournissent des constructions de MinGW-w64 (énumérés ci-dessus), fournissent maintenant aussi des constructions de MSYS2 que vous pouvez télécharger ici . Récemment, il est sorti de bêta, alors assurez-vous de vérifier 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 à leurs dernières versions. Par exemple, vous pouvez déjà profiter de choses comme: Bash 4.2, Faire 3.99, Git 1.8.4, et beaucoup plus; qui fonctionnent nativement sur les fenêtres de la boîte!

NOTE:

Assurez-vous de vérifier leur Wiki pour avoir un démarrage en douceur.

une nouvelle au-delà de MinGW-w64


"l'original MinGW était très lent sur améliorations, et ses développeurs n'ont même pas envisagé d'ajouter le support de génération cible 64 bits. Un homme ambitieux, Kai Tietz, l'a repris et l'a bifurqué car son entreprise avait besoin de construire des cibles 64 bits sur Windows. C'est ainsi que le projet MinGW-w64 est né. Bien que l'objectif principal ait été d'ajouter un support 64 bits, les développeurs ont amélioré la chaîne d'outils à de nombreux égards et ont abordé de nombreuses autres questions. Depuis lors, le projet MinGW-w64 s'est développé et est désormais bien en avance sur 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 a refusé de coopérer. Par conséquent, il y a aujourd'hui deux projets portant le même nom, ce qui peut parfois prêter à confusion, mais les différences de qualité et de soutien parlent d'elles-mêmes.

64
répondu Alexander Shukaev 2016-02-01 20:46:31

en termes de langage de base, Clang 3.3 et GCC 4.8.1 est déjà entièrement conforme à C++11(que ce soit sans bogue est encore un autre sujet). Pour ce qui est de la bibliothèque(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 Dernier, Visual C++2013 (actuellement RC, sera RTM dans 2 jours et général disponible en novembre 13) fournir un bien meilleur support pour C++11 dans les deux langues de base et STL, ne pensais pas encore complet. STL wise, afaik, c'est complet.

je pense que cela dépend de la caractéristique que vos codes utilisent réellement. Ont tous C++11 nouvelles fonctionnalités utilisées? Si les fonctionnalités de Visual C++2013 peuvent vous satisfaire, essayez-les. Sinon, clang a déjà fourni un port windows qui peut s'intégrer à Visual Studio, et peut se relier à la bibliothèque native(msvc C++ runtime) déjà(réclamé), je pense que vous pouvez également lui donner un essai.

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

8
répondu JC_Yang 2013-10-17 13:22:30

Clang a le soutien complet de windows (modulo Windows bibliothèque standard bugs dans libc++) Vous pouvez télécharger un" officiel "construction de windows de clang 3.3 d'ici: http://www.llvm.org/builds/

il n'inclut pas libc++ donc vous aurez besoin de télécharger soit cela ou votre bibliothèque standard de choix. Je recommande 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
répondu Richard Matheson 2013-10-17 14:09:05