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

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

ceci est un exemple d'un morceau de code C++11:

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

L'Éclipse de l'éditeur se plaint:

Function 'unique_ptr' could not be resolved

la compilation Makefile fonctionne très bien. Comment faire pour que Eclipse cesse de se plaindre de ce genre d'erreurs?

203

15 réponses

Instruction For Eclipse CDT 4.4 Luna and 4.5 Mars

d'abord, avant de créer le projet, configurer L'analyseur de syntaxe 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 ajouter -std=c++11

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

Pour projet créé: Fichier -> Nouveau -> Projet -> C/C++ -> C++ Projet

clic droit sur le projet créé et ouvert

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 à partir du Language standard baisse.

Pour CMake projet

générer des fichiers de projet eclipse (à l'intérieur de votre projet)

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

importe ensuite le répertoire généré pour eclipse en tant que standard eclipse project. Clic droit projet et ouvrir

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

activer CDT GCC Build-in Compiler Settings et le déplacer plus haut que Contributed PathEntry Containers (ceci est important)

Dernière Étape Commune

recompiler, régénérer Project -> C/C++ Index et de redémarrer Eclipse.

145
répondu Trismegistos 2017-09-20 14:19:18

mise à jour 2016:

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

pour Luna et Mars

cette section wiki communautaire incorpore la réponse de Trismegistos;

1. Avant de créer le projet, configurer L'analyseur de syntaxe Eclipse:

Window -> Preferences -> C/C++ -> Build -> Paramètres -> Découverte> CDT GCC Construire-dans les Paramètres du Compilateur

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

pour projet créé comme: Fichier - > Nouveau - > projet -> C/C++ -> C++ Projet

clic droit sur le projet créé et ouvert

Propriétés -> C/C++ Build -> Paramètres -> Paramètres de l'Outil -> GCC Compilateur C++ - > Dialecte

mettez -std=c++14 dans la zone de texte intitulée autres drapeaux de dialecte ou sélectionnez ISO C++11 à partir de la liste déroulante de la norme linguistique.

il y a maintenant une nouvelle façon de résoudre cela sans le piratage GXX_EXPERIMENTAL.

pour la plupart versions récentes : (actuellement Juno et Kepler Luna ):

sous 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 C / C++ Build (at project settings), trouver le préprocesseur inclure chemin et aller à la Fournisseurs Onglet . Désélectionnez tout sauf les paramètres de compilation CDT GCC. Puis décompressez les entrées de paramètres de partage ... . ajoute l'option-std=C++11 à la zone de texte appelée commande pour obtenir les spécifications du compilateur.

  2. aller aux chemins et symboles. Sous les symboles, cliquez sur restaurer par défaut , puis appliquez.


Notes:

Eclipse est difficile au sujet de frapper appliquer, vous devez le faire chaque fois que vous laissez un onglet 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
répondu Johan Lundberg 2017-05-23 11:54:50

Pour la dernière (Juno) eclipse cdt la suite travaillé 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:

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

C / C++ General - > préprocesseur Include Paths,Macros etc. - >passez à L'onglet "Fournisseurs":

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

  • désactiver tous les fournisseurs et sélectionner "CDT GCC Built-in Compiler Settings"

  • décocher la case "Partager réglage des entrées entre les projets (fournisseur mondial)"

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

  • cliquez sur appliquer et fermer la options

  • "reconstruire l'indice

maintenant toutes les choses liées au c++11 doivent être résolues correctement par l'indexeur.

win7 x64, dernière éclipse officielle avec cdt mingw-w64 gcc 4.7.2 du projet mingwbuilds sur sourceforge

20
répondu Andreas 2013-03-10 11:34:38

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

  • passer à Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols] .
  • ajouter le symbole: _ _ _ cplusplus avec la valeur 201103L "151980920
15
répondu Jerome 2014-03-08 17:21:16

pour Eclipse CDT Kepler ce qui a fonctionné pour moi de se débarrasser de std::thread symbole non résolu est:

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

  2. sélectionnez L'onglet "Découverte

  3. Sélectionnez CDT GCC Compilateur Intégré les Paramètres de [Partagé]

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

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

  1. Ok et Reconstruire l'Index pour le projet.

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 pour les versions plus anciennes comme Helios.

11
répondu user3348915 2018-09-01 13:25:04

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

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

Certaines parties de cette réponse sont déjà abordés dans d'autres réponses, mais je veux qu'il soit cohérent.

pour qu'il soit possible de construire en utilisant stdc++11, Il faut ajouter un drapeau spécifique pour le compilateur. Vous pouvez le faire via les propriétés du projet. Modifier les propriétés du projet RMB et Project properties ou ALT + ENTER . Puis C/C++ Build -> Paramètres -> Paramètres de l'Outil -> GCC Compilateur C++ - > Divers -> d'Autres Drapeaux. Put-std=c++11 à la fin de la ligne, pour GCC il ressemblera à quelque chose comme: -c -fmessage-length=0 -std=c++11 . En ajoutant -stdc++11 drapeau compilateur (GCC) déclare __GXX_EXPERIMENTAL_CXX0X__ par lui-même.

à ce point vous pouvez construire le projet en utilisant toute la bonté de C++11.

le problème est que Eclipse a son propre analyseur pour vérifier les erreurs - qui est pourquoi vous obtenez toujours toutes les mauvaises erreurs dans L'éditeur Eclipse, alors qu'en même temps vous pouvez construire et exécuter le projet sans aucune. Il ya un moyen de résoudre ce problème en déclarant explicitement __GXX_EXPERIMENTAL_CXX0X__ drapeau pour le projet, on peut le faire (tout comme Carsten Greiner dit): C / C++ général - > chemins et Symboles - > Symboles - > GNU C++. Cliquez Sur " Ajouter..."et après __GXX_EXPERIMENTAL_CXX0X__ (assurez-vous d'ajouter et de préparer deux caractères soulignés) dans" nom "et laissez" valeur " en blanc. Et maintenant, c'est la partie que je voulais couverture en commentaire à la première réponse, aller à: C / C++ General - > préprocesseur Include Path Macros etc. -> Providers, et sélectionnez CDT Managed Build Setting Entries puis cliquez sur APPLY et retournez à L'onglet Entries, sous GNU C++ il devrait y avoir maintenant des entrées de configuration de construction gérées par CDT vérifiez si à l'intérieur il y a défini __GXX_EXPERIMENTAL_CXX0X__ si c'est - > APPLY and rebuild index vous devriez être bien à ce point.

5
répondu ravwojdyla 2013-02-26 20:23:17

j'ai 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 répéter ces, mais en plus j'ai eu des problèmes en utilisant

std::thread

dans le cadre de c++11 (ajouter-pthread pour le linker résout ce problème). Quoi qu'il en soit, ces réglages ont finalement bien fonctionné:

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

-std=c++11
Drapeau

pour les compilateurs GCC et G++. Cliquez Sur Appliquer.

pour le linker, même fenêtre, divers, drapeaux de Linker, a ajouté le

-pthread
Drapeau

. Paramètres de bibliothèque partagés, nom D'objet partagé, ajouter le

-Wl,--no-as-needed
Drapeau

aussi. Cliquez Sur Appliquer.

C/C++ Général -> Chemins et des symboles -> ONGLET Symboles, GNU C++ sélectionné, Ajouter

__GXX_EXPERIMENTAL_CXX0X__

(aucune valeur)

Drapeau

. Cliquez Sur Appliquer.

C / C++ General - > préprocesseur Include paths.. - >Onglet fournisseurs: cochez

CDT GCC Compilateur intégré les Paramètres

et pour "commande pour obtenir les spécifications du compilateur", ajouter le

-std=c++11
Drapeau

. Décochez L'Option Partager. Cliquez Sur Appliquer.

CDT Managages Construire Réglage des Entrées d'effectuer cette vérification. Décochez les deux autres. Cliquez Sur Appliquer.

Pour revenir à L'onglet Entrées, GNU C++ CDT Managages Build Setting Entries, vous devriez maintenant Voir votre ajouté

__GXX_EXPERIMENTAL_CXX0X__

entrée.

C'est ça. Lors du codage, dactylographier

std::

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

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

à l'exécution.

3
répondu Ola Aronsson 2016-11-28 01:01:10

Je ne sais pas si c'est seulement moi, la solution la mieux classée ne fonctionne pas pour moi, ma version eclipse est juste plate-forme eclipse normale installé en utilisant sudo apt-get install eclipse dans Ubuntu Mais j'ai trouvé une solution qui adopte une méthode à la fois de la solution la mieux classée et la seconde, ce que j'ai fait pour la faire fonctionner est décrit comme ci-dessous (notez que les autres étapes comme la création d'un projet C++, etc. est ignoré pour la simplicité)

une Fois que vous avez créé le C++ project

(1) C/C++ Général -> Chemins et des Symboles -Symboles > - > C++de GNU. Cliquez Sur " Ajouter..."et coller GXX_EXPERIMENTAL_CXX0X (s'assurer d'ajouter et de pré-ajouter deux caractères soulignés) dans" nom "et laisser" valeur " en blanc.

(2) sous C/C++ Build (at project settings), trouvez le chemin Include du préprocesseur et allez à L'onglet Providers. Désélectionnez tout sauf les paramètres de compilation CDT GCC. Puis décompressez les entrées de paramètres de partage ... . Ajouter l' option-std=C++11 dans la zone de texte appelée commande pour obtenir les spécifications du compilateur

après exécuté au-dessus de 2 et 2 pas seulement, il fonctionne, l'eclipse est capable de résoudre le unique_ptr, Je ne sais pas pourquoi cette solution fonctionne, espérer qu'il peut aider les gens.

2
répondu doody1986 2015-03-23 17:37:00

Pour moi Eclipse Néon j'ai suivi Trismegistos réponse ci-dessus , MAIS j'ai aussi ajouté une étape supplémentaire:

  • Aller à projet --> Propriétés --> C++ Général --> Préprocesseur Inclure des chemins d'accès,les Macros, etc. --> Les fournisseurs de services --> CDT de la Croix-GCC Compilateur Intégré les Paramètres, ajouter le drapeau "-std=c++11"

cliquez sur appliquer et OK.

Cheers,

Guy.

1
répondu Guy Avraham 2017-12-18 05:22:15
  • faites un clic droit sur le projet et allez à "Propriétés"
  • C/C++ Build -> Paramètres -> Paramètres de l'Outil -> GCC Compilateur C++ - > Divers -> d'Autres Drapeaux. Mettez-lm à la fin de la zone de texte des autres drapeaux et OK.
0
répondu Sameera Chanaka 2013-07-25 01:21:38

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

0
répondu Jerry Miller 2014-05-05 16:36:41

pour obtenir le support de C++14 dans Eclipse Luna, vous pouvez faire ces étapes:

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

Réindexer votre projet et éventuellement redémarrer Eclipse. Il devrait fonctionner comme prévu.

0
répondu Jerome 2014-11-20 15:43:23

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 utilisez le compilateur GNU C++, c'est ce que j'ai fait pour corriger:

Projet -> Propriétés -> C/C++ Général -> Préprocesseur Inclure des Chemins d'accès -> GNU C++ -> CDT de l'Utilisateur Réglage des Entrées

  1. cliquez sur le bouton" Ajouter..."bouton

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

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

  4. Puis reconstruire vous C++ indice: les Projets -> C/C++ Index -> Reconstruire

0
répondu Rubens Gomes 2016-03-09 02:50:42

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 les inclut dans /usr/local/include.

J'ai fait un CD dans /usr/local/bin et j'ai fait un lien symbolique de g++@7 qui que ce soit à G++ parce que @ bit est ennuyeux.

puis je suis allé sur MyProject - > Properties - > C/C++ Build - > Settings - > GCC C++ Compiler et j'ai changé la commande de "++ G" en "/usr/local/bin/g++". Si vous décidez de ne pas le lien symbolique, vous pouvez être plus précis.

faites la même chose pour le linker.

appliquer et appliquer et fermer. Qu'il reconstruise l'index. Pendant un certain temps, il a montré un nombre impressionnant d'erreurs, mais je pense que c'était lors de la construction des index. Pendant que je cherchais les erreurs, elles ont toutes disparu sans suite.


je pense que sans vérifier que vous pourriez aussi aller dans Eclipse -> Properties - > C/C++ - > Core Build Toolchains et éditer ceux avec des chemins différents, mais je ne suis pas sûr de ce que cela va faire.

0
répondu Joseph Larson 2018-04-03 17:37:20