423 votes

Compilation de C ++11 avec g ++

Je suis en train de mettre à jour mon compilateur C++ pour C ++11. J’ai cherché un peu et j’en suis venu à la conclusion que je dois utiliser l’indicateur ou , mais je ne sais pas beaucoup de choses sur les drapeaux. Quelqu'un peut-il m’aider ? (J’utilise Ubuntu 12.04.)

Voici l’erreur que je reçois du compilateur lorsque je tente d’utiliser une bibliothèque qui est incluse dans C ++11(i.e. array) :

``

613voto

Oskar N. Points 2124

Drapeaux (ou options de compilateur) ne sont rien mais ordinaire command line arguments passés au compilateur exécutables.

En supposant que vous appelez g ++ à partir de la ligne de commande (terminal) :

``

ou

``

Si ce qui précède ne fonctionne pas.

50voto

Harajyoti Das Points 141

Vous pouvez vérifier votre g++ par la commande:

which g++
g++ --version

cela vous indiquera le compilateur est actuellement, il est orienté.

Pour basculer en g++ 4.7 (en supposant que vous avez installé dans votre machine),exécutez:

sudo update-alternatives --config gcc

There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

  Selection    Path              Priority   Status
------------------------------------------------------------
  0            /usr/bin/gcc-4.6   60        auto mode
  1            /usr/bin/gcc-4.6   60        manual mode
* 2            /usr/bin/gcc-4.7   40        manual mode

Ensuite, sélectionnez 2 sélection(Ma machine déjà ressortir g++ 4.7,de sorte que le *)

Une fois que vous passez le compilateur puis exécutez à nouveau g++ --version pour vérifier la commutation s'est passé correctement.

Maintenant compiler votre programme avec

g++ -std=c++11 your_file.cpp -o main

16voto

Michael Slade Points 9128

Votre ubuntu a certainement une version suffisamment récente de g ++. Le drapeau à utiliser est `` .

13voto

user1356386 Points 874

Si vous voulez garder le compilateur GNU extensions, utilisez -std=gnu++0x plutôt que d'-std=c++0x. Voici une citation de la page de man:

Le compilateur peut accepter plusieurs standards de base, tels que c89 ou c++98, et GNU dialectes de ces normes, comme gnu89 ou gnu++98. Par la spécification d'une base standard, le compilateur acceptera tous les programmes suivant cette norme, et ceux de l'utilisation de GNU extensions qui ne sont pas de la contredire. Par exemple, -std=c89 désactive certaines fonctionnalités de GCC qui sont incompatibles avec la norme ISO C90, tels que le "asm" et "typeof" mots-clés, mais pas les autres extensions GNU qui n'ont pas de sens dans ISO C90, comme en omettant le moyen terme d'un "?:" de l'expression. Sur le d'autre part, en spécifiant un GNU dialecte standard, toutes les fonctions la prise en charge du compilateur sont activés, même lorsque ces fonctionnalités modifier les sens de la norme de base et strictement conforme programmes être rejeté. La norme est utilisée par pédant à identifier les fonctions qui sont des extensions GNU étant donné que la version de la norme. Par exemple-std=gnu89 -pédant souhaite mettre en garde au sujet de style C++ // les commentaires, les tout -std=gnu99 -pédant ne le serait pas.

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