web-dev-qa-db-fra.com

Comment activer le support C++ 11/C++ 0x dans Eclipse CDT?

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

Voici un exemple de code C++ 11:

auto text = std::unique_ptr<char[]>(new char[len]);

L'éditeur Eclipse se plaint de:

Function 'unique_ptr' could not be resolved

La compilation Makefile fonctionne bien. Comment faire en sorte qu'Eclipse cesse de se plaindre de ce type d'erreur?

207
Nick

J'ai trouvé this article sur le forum Eclipse, je viens de suivre ces étapes et cela fonctionne pour moi. J'utilise Eclipse Indigo 20110615-0604 sur Windows avec une configuration Cygwin.

  • Faire un nouveau projet C++ 
  • Options par défaut pour tout
  • Une fois créé, faites un clic droit sur le projet et allez dans "Propriétés"
  • C/C++ Build -> Paramètres -> Paramètres d’outil -> Compilateur GCC C++ -> Divers -> Autres drapeaux. Mettez -std=c++0x (ou pour la version la plus récente du compilateur -std=c++11 à la fin. ... au lieu du compilateur GCC C++, j'ai aussi le compilateur Cygwin
  • C/C++ Général -> Chemins et symboles -> Symboles -> GNU C++. Cliquez sur "Ajouter ..." et collez __GXX_EXPERIMENTAL_CXX0X__ (assurez-vous d'ajouter et de précéder deux traits de soulignement) dans "Nom" et laissez "Valeur" vide.
  • Cliquez sur Appliquer, faites ce que vous avez demandé, puis cliquez sur OK.

Eclipse FAQ en contient une description: FAQ Eclipse/C++ 11 .

Réglage de l'image Eclipse

219
Carsten Greiner

Instruction pour Eclipse CDT 4.4 Luna et 4.5 Mars

Tout d'abord, avant de créer un projet, configurez l'analyseur syntaxique Eclipse:  

Window -> Preferences -> C/C++ -> Build -> Settings -> Discovery -> CDT GCC Build-in Compiler Settings

dans la zone de texte intitulée Command to get compiler specs append -std=c++11

Maintenant, vous pouvez créer un projet, la configuration dépend du type de projet que vous avez créé: 

Pour le projet créé en tant que: Fichier -> Nouveau -> Projet -> C/C++ -> Projet C++

Faites un clic droit sur le projet créé et ouvrez 

Properties -> C/C++ Build -> Settings -> Tool Settings -> GCC C++ Compiler -> Dialect

Mettez -std=c++11 dans la zone de texte intitulée other dialect flags ou sélectionnez ISO C++11 dans la liste déroulante Language standard.

Pour le projet CMake

Générez des fichiers de projet Eclipse (dans votre projet)

mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..

Importez ensuite le répertoire généré dans Eclipse en tant que projet Eclipse standard. Faites un clic droit sur le projet et ouvrez

Properties -> C/C++ General -> Preprocessor Include Paths, Marcos etc. -> Providers

activez CDT GCC Build-in Compiler Settings et déplacez-le au-dessus de Contributed PathEntry Containers (c'est important)

Dernière étape commune  

recompilez, régénérez Project -> C/C++ Index et redémarrez Eclipse.

146
Trismegistos

Mise à jour 2016: 

A partir de gcc 6 ( changes ), le dialecte C++ par défaut est C++ 14. Cela signifie qu'à moins d'avoir explicitement besoin d'un dialecte plus récent ou plus ancien, vous n'avez plus besoin de faire quoi que ce soit avec Eclipse. 

Pour Luna et Mars

Cette section wiki de la communauté intègre la réponse de Trismegistos;

1. Avant de créer un projet, configurez l'analyseur syntaxique Eclipse:

Fenêtre -> Préférences -> C/C++ -> Construire -> Paramètres -> Découverte -> Paramètres du compilateur intégré CDT GCC

dans la zone de texte intitulée Commande pour obtenir les spécifications du compilateur, ajoutez -std=c++142. Créer un projet, la configuration dépend du type de projet que vous avez créé:

Pour le projet créé en tant que: Fichier -> Nouveau -> Projet -> C/C++ -> Projet C++

Faites un clic droit sur le projet créé et ouvrez

Propriétés -> Génération C/C++ -> Paramètres -> Paramètres d'outil -> Compilateur GCC C++ -> Dialecte

Placez -std=c++14 dans la zone de texte intitulée autres drapeaux de dialecte ou sélectionnez ISO C++ 11 dans la liste déroulante Norme de langue.

Il existe maintenant une nouvelle façon de résoudre ce problème sans le piratage GXX_EXPERIMENTAL.

Pour les versions les plus récentes: (Actuellement Juno et Kepler Luna):

Dans les nouvelles versions de Juno, les paramètres sont situés à Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()

Anciennes versions 2012/2013: 

  1. Sous Génération C/C++ (dans les paramètres du projet), recherchez le chemin du préprocesseur inclure et accédez à l'onglet Fournisseurs. Désélectionnez tout sauf les paramètres du compilateur intégré CDT GCC. Désélectionnez ensuite les entrées de paramètres de partage…. Ajoutez l'option -std = c ++ 11 dans la zone de texte appelée Commande pour obtenir les spécifications du compilateur.

  2. Aller aux chemins et aux symboles. Sous Symboles, cliquez sur restaurer les paramètres par défaut, puis appliquez. 


Remarques:

Eclipse est difficile à appliquer, vous devez le faire chaque fois que vous quittez un onglet de paramètres.

[Auto-promotion]: J'ai écrit mes propres instructions plus détaillées basées sur ce qui précède. http://scrupulousabstractions.tumblr.com/post/36441490955/Eclipse-mingw-builds

Merci à l'utilisateur Nobody à https://stackoverflow.com/a/13635080/1149664

110
Johan Lundberg

Pour le dernier (Juno) Eclipse cdt, ce qui suit a fonctionné pour moi, pas besoin de déclarer __GXX_EXPERIMENTAL_CXX0X__ sur moi-même. Cela fonctionne pour l'indexeur CDT et comme paramètre pour le compilateur:

"nom de votre projet" -> clic droit -> propriétés:

C/C++ Général -> Chemins d'inclusion du préprocesseur, macros, etc. -> Basculez vers l'onglet nommé "Fournisseurs":

  • pour "Configuration", sélectionnez "Release" (et ensuite "debug")

  • éteignez tous les fournisseurs et sélectionnez simplement "Paramètres du compilateur intégré CDT GCC"

  • décochez "Partager les entrées de réglage entre les projets (fournisseur global)"

  • dans la "Commande pour obtenir les spécifications du compilateur:" add "-std = c ++ 11" sans les guillemets (peut également fonctionner avec des guillemets)

  • appuyez sur Appliquer et fermez les options

  • reconstruire l'index

Maintenant, tous les problèmes liés à c ++ 11 doivent être résolus correctement par l'indexeur.

win7 x64, dernière version officielle d'Eclipse avec cdt mingw-w64 gcc 4.7.2 du projet mingwbuilds sur sourceforge

20
Andreas

J'ai eu le même problème sur mon Eclipse Juno. Ces étapes ont résolu le problème:

  • Allez à Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
  • Ajouter le symbole: __cplusplus avec la valeur 201103L
15
Jerome

Pour Eclipse CDT Kepler, ce qui a fonctionné pour moi de supprimer le symbole std::thread non résolu est le suivant:

  1. Allez dans Préférences-> C/C++ -> Construire-> Paramètres

  2. Sélectionnez l'onglet Découverte

  3. Sélectionnez les paramètres du compilateur intégré CDT GCC [Partagé]

  4. Ajoutez le -std = c ++ 11 à la commande "pour obtenir les spécifications du compilateur:" telles que:

$ {COMMAND} -E -P -v -dD -std = c ++ 11 $ {INPUTS}

  1. Ok et Rebuild Index pour le projet.

L'ajout de -std=c++11 au projet Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Les drapeaux ne suffisaient pas pour Kepler, mais suffisaient pour les versions plus anciennes telles que Helios.

11
user3348915

Je ne peux pas encore commenter alors j'écris ma propre réponse:

Ceci est lié à __GXX_EXPERIMENTAL_CXX0X__ et est valable pour Eclipse Juno et CDT 8.x. 

Certaines parties de cette réponse sont déjà couvertes dans d'autres réponses mais je veux que ce soit cohérent.

Pour rendre possible la construction avec stdc ++ 11, il faut ajouter un drapeau spécifique pour le compilateur. Vous pouvez le faire via les propriétés du projet. Pour modifier les propriétés du projet RMB andProject properties ou ALT + ENTER. Puis C/C++ Build -> Paramètres -> Paramètres d’outil -> Compilateur GCC C++ -> Divers -> Autres drapeaux. Mettez -std = c ++ 11 en fin de ligne, pour GCC, cela ressemblera à: -c -fmessage-length=0 -std=c++11. En ajoutant -stdc ++ 11, le compilateur d'indicateurs (GCC) déclarera __GXX_EXPERIMENTAL_CXX0X__ lui-même.

À ce stade, vous pouvez construire un projet en utilisant toute la qualité de C++ 11.

Le problème, c’est que Eclipse dispose de son propre analyseur pour vérifier les erreurs. C’est pourquoi vous obtenez toujours toutes les mauvaises erreurs dans l’éditeur Eclipse, tout en permettant de construire et d’exécuter un projet sans aucune erreur. Il existe un moyen de résoudre ce problème en déclarant explicitement le drapeau __GXX_EXPERIMENTAL_CXX0X__ pour le projet. On peut le faire (tout comme l’a dit Carsten Greiner): C/C++ Général -> Chemins et symboles -> Symboles -> GNU C++. Cliquez sur "Ajouter ..." et sur __GXX_EXPERIMENTAL_CXX0X__ passé (assurez-vous d'ajouter et de préfixer deux traits de soulignement) dans "Nom" et laissez "Valeur" vide. Et voici maintenant la partie supplémentaire que je voulais couvrir dans le commentaire de la première réponse, allez à: C/C++ Général -> Macros de chemin d'inclusion de préprocesseur, etc. -> Fournisseurs, et sélectionnez CDT Managed Build Setting Entries puis cliquez sur APPLIQUER et allez De retour à l'onglet Entrées, sous GNU C++, il devrait maintenant y avoir des entrées de paramètres de construction gérés par CDT. Si à l'intérieur, il y a __GXX_EXPERIMENTAL_CXX0X__ s'il est -> APPLY et l'index de reconstruction, tout devrait bien se passer.

5
ravwojdyla

J'ai également eu plusieurs problèmes (Ubuntu 13.04 64 bits, g ++ - 4.8, Eclipse Juno 3.8.1, CDT 6.0.0). Beaucoup de choses sont mentionnées ci-dessus, désolé de les répéter, mais j’ai eu des problèmes pour utiliser 

std::thread

dans le cadre de c ++ 11 (l'ajout de -pthread pour l'éditeur de liens résout ce problème). Enfin, ces réglages ont finalement fonctionné correctement:

Projet -> Propriétés -> Génération C/C++ -> Paramètres -> Divers. Ajouter le 

-std=c++11

indicateur pour les compilateurs GCC et G ++. Cliquez sur Appliquer.

Pour l’éditeur de liens, même fenêtre, Divers, indicateurs d’éditeur de liens, ajout de la

-pthread

drapeau. Paramètres de la bibliothèque partagée, Nom de l'objet partagé, ajoutez le

-Wl,--no-as-needed

drapeau aussi. Cliquez sur Appliquer.

Général C/C++ -> Chemins et symboles -> Onglet Symboles, GNU sélectionné par C++, ajoutez le

__GXX_EXPERIMENTAL_CXX0X__

(aucune valeur)

drapeau. Cliquez sur Appliquer.

C/C++ Général -> Chemins d'inclusion du préprocesseur .. -> Onglet Fournisseurs: cochez

Paramètres du compilateur intégré CDT GCC

et pour "Commande pour obtenir les spécifications du compilateur", ajoutez le 

-std=c++11

drapeau. Décochez Partager. Cliquez sur Appliquer.

CDT gère les entrées de paramètres de construction, cochez cette case également. Décocher les deux autres. Cliquez sur Appliquer.

Pour revenir à l'onglet Entrées, GNU C++ CDT gère les entrées de paramètres de construction, vous devriez maintenant voir votre

__GXX_EXPERIMENTAL_CXX0X__

entrée.

C'est tout. En codant, en tapant

std::

peut maintenant auto-compléter la classe de thread par exemple, les constructions devraient fonctionner correctement et il ne devrait y avoir aucune

std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted

à l'exécution.

3
Ola Aronsson

Je ne sais pas si c'est seulement moi, la solution la mieux classée ne fonctionne pas pour moi, ma version d'Eclipse est simplement la plate-forme Eclipse normale installée à l'aide de Sudo apt-get install Eclipse dans Ubuntu Mais j'ai trouvé une solution qui adopte la méthode à la fois de la solution la mieux classée et de la seconde, ce que j’ai fait pour que cela fonctionne est décrit ci-dessous (Notez que les autres étapes telles que la création d’un projet C++, etc., sont ignorées pour des raisons de simplicité).

Une fois que vous avez créé le projet C++

(1) C/C++ Général -> Chemins et symboles -> Symboles -> GNU C++. Cliquez sur "Ajouter ..." et collez GXX_EXPERIMENTAL_CXX0X (assurez-vous d'ajouter et de préfixer deux traits de soulignement) dans "Nom" et laissez "Valeur" vide.

(2) Sous Génération C/C++ (dans les paramètres du projet), recherchez le chemin d'inclusion du préprocesseur et accédez à l'onglet Fournisseurs. Désélectionnez tout sauf les paramètres du compilateur intégré CDT GCC. Désélectionnez ensuite les entrées de paramètres de partage…. Ajoutez l'option -std = c ++ 11 à la zone de texte appelée Commande pour obtenir les spécifications du compilateur

Après avoir effectué les étapes ci-dessus 2 et 2 seulement, cela fonctionne, Eclipse est capable de résoudre unique_ptr, je ne sais pas pourquoi cette solution fonctionne, j'espère qu'elle pourra aider les gens.

2
doody1986

Eclipse C/C++ ne reconnaît pas le symbole std::unique_ptr même si vous avez inclus l'en-tête de mémoire C++ 11 dans votre fichier. 

En supposant que vous utilisiez le compilateur GNU C++, voici ce que j'ai fait pour résoudre ce problème:

Projet -> Propriétés -> Général C/C++ -> Chemins d'inclusion de préprocesseur -> GNU C++ -> Entrées de paramètres utilisateur CDT

  1. Cliquez sur le bouton "Ajouter ..."

  2. Sélectionnez "Macro de préprocesseur" dans le menu déroulant.

    Name: __cplusplus     Value:  201103L
    
  3. Appuyez sur Appliquer, puis sur OK pour revenir à votre projet.

  4. Puis reconstruisez votre index C++: Projets -> Index C/C++ -> Reconstruire

1
Rubens Gomes

Pour moi sur Eclipse Neon j'ai suivi Trismegistos répondre ci-dessus , ENCORE, j'ai également ajouté une étape supplémentaire: 

  • Allez au projet -> Propriétés -> C++ Général -> Les chemins d’inclusion de préprocesseur, macros etc. -> Fournisseurs -> Paramètres du compilateur intégré CDT Cross GCC, ajoutez le drapeau "-std = c ++ 11 "

Cliquez sur Appliquer et sur OK.

À votre santé,

Gars.

1
Guy Avraham

Pour obtenir une assistance pour C++ 14 dans Eclipse Luna, procédez comme suit:

  • Dans C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings, ajoutez "-std = c ++ 14"
  • Dans C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous, ajoutez "-std = c ++ 14"

Réindexez votre projet et redémarrez éventuellement Eclipse. Cela devrait fonctionner comme prévu.

0
Jerome
  • faites un clic droit sur le projet et allez dans "Propriétés"
  • C/C++ Build -> Paramètres -> Paramètres d’outil -> Compilateur GCC C++ -> Divers -> Autres drapeaux. Placez -lm à la fin de la zone de texte des autres indicateurs, puis cliquez sur OK.
0
Sameera Chanaka

Ni le hack ni la version plus propre ne fonctionnent pour Indigo. Le hack est ignoré et les options de configuration requises sont manquantes. Sans aucune raison apparente, la construction a commencé à fonctionner après avoir échoué et sans fournir de raison utile. Au moins depuis la ligne de commande, j'obtiens des résultats reproductibles.

0
Jerry Miller

J'ai eu un problème similaire lors de l'utilisation d'Eclipse C++ 2019-03 pour un projet mixte C et C++ utilisant std :: optional et std :: swap. Ce qui a fonctionné pour moi était ceci. Dans le projet Propriétés-> C/C++ Édition-> Paramètres-> Paramètres d'outil-> Compilateur Cross G ++, supprimez -std = gnu ++ 17 de la catégorie Divers et placez-le dans Dialect-> Autres drapeaux de dialecte.

0
dc42

Je l'ai résolu de cette façon sur un Mac. J'ai utilisé Homebrew pour installer la dernière version de gcc/g ++. Ils atterrissent dans/usr/local/bin avec includes dans/usr/local/include.

J'ai gravé un CD dans/usr/local/bin et créé un lien symbolique de g ++ @ 7qu’il n’existait plus que de simplement g ++ car ce @ bit était gênant.

Ensuite, je suis allé dans MyProject -> Propriétés -> Construction C/C++ -> Paramètres -> Compilateur GCC C++ et ai changé la commande de "g ++" en "/ usr/local/bin/g ++". Si vous décidez de ne pas faire le lien symbolique, vous pouvez être plus précis.

Faites la même chose pour l'éditeur de liens.

Appliquer et Appliquer et Fermer. Laissez-le reconstruire l'index. Pendant un certain temps, il y avait un nombre impressionnant d’erreurs, mais je pense que c’était en construisant des index. Pendant que je découvrais les erreurs, elles ont toutes disparu sans autre action.


Je pense sans vérifier que vous pouvez également accéder à Eclipse -> Propriétés -> C/C++ -> Chaînes de construction de base et les éditer avec des chemins différents, mais je ne suis pas sûr de ce que cela va faire.

0
Joseph Larson