it-swarm.com.de

Wie aktivieren Sie die Unterstützung für C++ 11/C++ 0x in Eclipse CDT?

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

Dies ist ein Beispiel eines C++ 11-Codes:

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

Der Eclipse-Editor beschwert sich über:

Function 'unique_ptr' could not be resolved

Die Makefile-Kompilierung funktioniert gut. Wie kann Eclipse aufhören, sich über diese Art von Fehlern zu beschweren?

207
Nick

Ich habe this article im Eclipse-Forum gefunden, nur diese Schritte befolgt und es funktioniert für mich. Ich verwende Eclipse Indigo 20110615-0604 unter Windows mit einem Cygwin-Setup.

  • Erstellen Sie ein neues C++ - Projekt 
  • Standardoptionen für alles
  • Klicken Sie nach der Erstellung mit der rechten Maustaste auf das Projekt und gehen Sie zu "Eigenschaften".
  • C/C++ Build -> Einstellungen -> Tool-Einstellungen -> GCC C++ - Compiler -> Verschiedenes -> Andere Flags. Setzen Sie -std=c++0x (oder für neuere Compilerversion -std=c++11 am Ende. ... anstelle von GCC C++ - Compiler habe ich auch Cygwin-Compiler
  • C/C++ Allgemein -> Pfade und Symbole -> Symbole -> GNU C++. Klicken Sie auf "Hinzufügen ..." und fügen Sie __GXX_EXPERIMENTAL_CXX0X__ (stellen Sie sicher, dass zwei Unterstriche angehängt und vorangestellt werden) in "Name" ein und lassen Sie "Wert" leer.
  • Klicken Sie auf Anwenden, tun Sie, was immer Sie von Ihnen verlangt, und klicken Sie dann auf OK.

Es gibt jetzt auch eine Beschreibung in Eclipse FAQ: Eclipse-FAQ/C++ 11 Features .

Eclipse Bildeinstellung

219
Carsten Greiner

Anleitung für Eclipse CDT 4.4 Luna und 4.5 Mars

Bevor Sie ein Projekt erstellen, konfigurieren Sie den Eclipse-Syntaxparser:  

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

im Textfeld Command to get compiler specs anhängen -std=c++11

Jetzt können Sie ein Projekt erstellen. Die Konfiguration hängt davon ab, welche Art von Projekt Sie erstellt haben: 

Für ein Projekt erstellt als: Datei -> Neu -> Projekt -> C/C++ -> C++ - Projekt

Klicken Sie mit der rechten Maustaste auf das erstellte Projekt und öffnen Sie es 

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

Geben Sie -std=c++11 in das Textfeld other dialect flags ein oder wählen Sie ISO C++11 aus der Dropdown-Liste Language standard aus.

Für CMake-Projekt

Eclipse-Projektdateien generieren (innerhalb Ihres Projekts)

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

Importieren Sie dann das generierte Verzeichnis als Eclipse-Standardprojekt in Eclipse. Klicken Sie mit der rechten Maustaste auf das Projekt und öffnen Sie es

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

aktivieren Sie CDT GCC Build-in Compiler Settings und verschieben Sie ihn höher als Contributed PathEntry Containers (Dies ist wichtig)

Letzter gemeinsamer Schritt  

compilieren, generieren Sie Project -> C/C++ Index neu und starten Sie Eclipse erneut.

146
Trismegistos

Update 2016: 

Seit gcc 6 ( changes ) ist der Standard-C++ - Dialekt C++ 14. Das bedeutet, dass Sie, wenn Sie nicht explizit einen neueren oder älteren Dialekt als als benötigen, nichts mehr mit Eclipse zu tun haben. 

Für Luna und Mars

Dieser Community-Wiki-Abschnitt enthält die Antwort von Trismegistos.

1. Konfigurieren Sie den Eclipse-Syntaxparser vor dem Erstellen eines Projekts:

Fenster -> Einstellungen -> C/C++ -> Erstellen -> Einstellungen -> Erkennung -> CDT GCC Build-In-Compiler-Einstellungen

im Textfeld Befehl zum Abrufen der Compilerspezifikationen wird -std=c++14.__ angefügt. 2. Projekt anlegen, Konfiguration hängt davon ab, welche Art von Projekt Sie erstellt haben:

Für ein Projekt erstellt als: Datei -> Neu -> Projekt -> C/C++ -> C++ - Projekt

Klicken Sie mit der rechten Maustaste auf das erstellte Projekt und öffnen Sie es

Eigenschaften -> C/C++ - Build -> Einstellungen -> Tool-Einstellungen -> GCC C++ - Compiler -> Dialekt

Fügen Sie -std=c++14 in ein Textfeld mit dem Titel "Andere Dialektflags" ein oder wählen Sie "ISO C++ 11" aus der Dropdown-Liste "Sprachstandard".

Es gibt jetzt eine neue Möglichkeit, dies ohne den GXX_EXPERIMENTAL-Hack zu lösen.

Für die neuesten Versionen: (Aktuell Juno und Kepler Luna):

Bei neueren Versionen von Juno befinden sich die Einstellungen unter Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()

Ältere Versionen 2012/2013: 

  1. Suchen Sie unter C/C++ Build (in den Projekteinstellungen) den Pfad Preprozessor Include und wechseln Sie zur Registerkarte Providers. Deaktivieren Sie alle Einstellungen außer CDT GCC Builtin Compiler Settings. Dann heben Sie die Share-Einstellungen auf. Fügen Sie die Option -std = c ++ 11 zum Textfeld "Befehl" hinzu, um Compilerspezifikationen abzurufen.

  2. Gehen Sie zu Pfaden und Symbolen. Klicken Sie unter Symbole auf restore default, und wenden Sie dann an. 


Anmerkungen:

Eclipse ist wählerisch, wenn Sie auf "Anwenden" klicken. Sie müssen es jedes Mal tun, wenn Sie eine Registerkarte "Einstellungen" verlassen.

[Eigenwerbung]: Ich habe meine eigenen detaillierteren Anweisungen auf der Grundlage der obigen Ausführungen geschrieben. http://scrupulousabstractions.tumblr.com/post/36441490955/Eclipse-mingw-builds

Vielen Dank an den Benutzer Nobody unter https://stackoverflow.com/a/13635080/1149664

110
Johan Lundberg

Für das neueste (Juno) Eclipse-CDTT, das für mich funktioniert, besteht keine Notwendigkeit, __GXX_EXPERIMENTAL_CXX0X__ bei mir selbst anzugeben. Dies funktioniert für den CDT-Indexer und als Parameter für den Compiler:

"Ihr Projektname" -> Rechtsklick -> Eigenschaften:

C/C++ Allgemein -> Präprozessor Include-Pfade, Makros usw. -> Wechseln Sie auf die Registerkarte "Provider":

  • für "Konfiguration" wählen Sie "Release" (und anschließend "Debug")

  • schalten Sie alle Provider aus und wählen Sie "CDT GCC Built-in Compiler Settings" aus.

  • deaktivieren Sie "Freigabeeinträge für Projekte freigeben (globaler Anbieter)".

  • im "Befehl zum Abrufen der Compilerspezifikationen:" add "-std = c ++ 11" ohne Anführungszeichen (funktioniert möglicherweise auch mit Anführungszeichen)

  • klicken Sie auf "Übernehmen" und schließen Sie die Optionen

  • erstellen Sie den Index neu

Jetzt sollten alle mit C++ 11 zusammenhängenden Informationen vom Indexer korrekt aufgelöst werden.

win7 x64, letzter offizieller Eclipse mit cdt mingw-w64 gcc 4.7.2 aus dem mingwbuilds-Projekt auf sourceforge

20
Andreas

Ich hatte das gleiche Problem bei meiner Eclipse Juno. Diese Schritte haben das Problem gelöst:

  • Gehe zu Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
  • Fügen Sie das Symbol hinzu: __cplusplus mit dem Wert 201103L
15
Jerome

Für Eclipse CDT Kepler ist es mir gelungen, das std::thread nicht aufgelöste Symbol loszuwerden:

  1. Gehen Sie zu Einstellungen-> C/C++ -> Erstellen-> Einstellungen

  2. Wählen Sie die Registerkarte Discovery

  3. Wählen Sie die Einstellungen für den integrierten CDT-GCC-Compiler aus [Shared].

  4. Fügen Sie dem Feld "Befehl zum Abrufen der Compilerspezifikationen:" die Angabe -std = c ++ 11 hinzu. Beispiel:

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

  1. Ok und Index für das Projekt neu erstellen.

Das Hinzufügen von -std=c++11 zum Projekt Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Flags war für Kepler nicht ausreichend, für ältere Versionen wie Helios jedoch ausreichend.

11
user3348915

Ich kann noch nicht kommentieren, schreibe also meine eigene Antwort:

Es ist verwandt mit __GXX_EXPERIMENTAL_CXX0X__ und gilt für Eclipse Juno und CDT 8.x. 

Einige Teile dieser Antwort sind bereits in anderen Antworten enthalten, aber ich möchte, dass sie kohärent sind.

Um das Erstellen mit stdc ++ 11 zu ermöglichen, muss ein bestimmtes Flag für den Compiler hinzugefügt werden. Sie können dies über Projekteigenschaften tun. So ändern Sie die Projekteigenschaften RMB undProject properties oder ALT + ENTER. Dann C/C++ Build -> Einstellungen -> Tool-Einstellungen -> GCC C++ - Compiler -> Verschiedenes -> Andere Flags. Fügen Sie am Ende der Zeile -std = c ++ 11 ein. Für GCC sieht es etwa so aus: -c -fmessage-length=0 -std=c++11. Durch Hinzufügen von -stdc ++ 11 wird der Flag-Compiler (GCC) __GXX_EXPERIMENTAL_CXX0X__ von selbst deklarieren.

An dieser Stelle können Sie ein Projekt mit der Güte von C++ 11 erstellen.

Das Problem ist, dass Eclipse über einen eigenen Parser verfügt, der auf Fehler überprüft werden kann. Deshalb werden im Eclipse-Editor immer noch alle bösen Fehler angezeigt. Gleichzeitig können Sie ein Projekt ohne Fehler erstellen und ausführen. Es gibt eine Möglichkeit, dieses Problem zu lösen, indem Sie das __GXX_EXPERIMENTAL_CXX0X__-Flag explizit für das Projekt deklarieren. Dies kann man tun (genau wie Carsten Greiner es gesagt hat): C/C++ Allgemein -> Pfade und Symbole -> Symbole -> GNU C++. Klicken Sie auf "Hinzufügen ..." und hinter __GXX_EXPERIMENTAL_CXX0X__ (stellen Sie sicher, dass zwei Unterstriche angehängt und vorangestellt werden) in "Name" und lassen Sie "Value" leer. Und jetzt ist der zusätzliche Teil, den ich in Kommentar zur ersten Antwort behandeln wollte. Gehen Sie zu: C/C++ - Allgemein -> Präprozessor Include Path Macros usw. -> Anbieter, und wählen Sie CDT Managed Build Setting Entries aus, und klicken Sie auf APPLY Zurück zur Registerkarte Entries, unter GNU C++ sollte jetzt CDT Managed Build Setting Entries überprüft werden, wenn dort __GXX_EXPERIMENTAL_CXX0X__ definiert ist, wenn es -> APPLY ist und den Index neu erstellen, sollten Sie zu diesem Zeitpunkt in Ordnung sein.

5
ravwojdyla

Ich hatte auch mehrere Probleme (Ubuntu 13.04 64-Bit, g ++ - 4.8, Eclipse Juno 3.8.1, CDT 6.0.0). Viele Dinge wurden oben erwähnt, es tut mir leid, diese zu wiederholen, aber zusätzlich hatte ich Probleme bei der Verwendung 

std::thread

als Teil von C++ 11 (Hinzufügen von -pthread für den Linker löst dieses Problem). Auf jeden Fall funktionierten diese Einstellungen endlich:

Projekt -> Eigenschaften -> C/C++ Build -> Einstellungen -> Sonstiges. Ergänzen Sie die 

-std=c++11

flag für die GCC- und G ++ - Compiler. Klicken Sie auf Übernehmen.

Für den Linker, dasselbe Fenster, Verschiedenes, Linker-Flags, hinzugefügt

-pthread

flagge. Shared Library-Einstellungen, Shared Object-Name, fügen Sie das hinzu

-Wl,--no-as-needed

flagge auch. Klicken Sie auf Übernehmen.

C/C++ Allgemein -> Pfade und Symbole -> Symbole TAB, GNU C++ ausgewählt, Hinzufügen der

__GXX_EXPERIMENTAL_CXX0X__

(kein Wert)

flagge. Klicken Sie auf Übernehmen.

C/C++ - Allgemein -> Präprozessor Pfade einschließen .. -> Registerkarte Anbieter: prüfen

Integrierte CDT GCC-Compiler-Einstellungen

und für "Command to get compiler specs" das 

-std=c++11

flagge. Deaktivieren Sie Share. Klicken Sie auf Übernehmen.

CDT verwaltet Build-Einstellungen, überprüfen Sie dies ebenfalls. Deaktivieren Sie die beiden anderen. Klicken Sie auf Übernehmen.

Zurück zur Registerkarte Entries, GNU C++ CDT Managages Build Setting Entries, sollten Sie nun Ihre hinzugefügten Einträge sehen

__GXX_EXPERIMENTAL_CXX0X__

eintrag.

Das ist es. Beim Codieren eingeben

std::

die Thread-Klasse kann jetzt zum Beispiel automatisch vervollständigt werden, Builds sollten problemlos funktionieren und Nein

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

zur Laufzeit.

3
Ola Aronsson

Ich weiß nicht, ob es nur ich ist, die am besten bewertete Lösung funktioniert nicht für mich, meine Eclipse-Version ist nur eine normale Eclipse-Plattform, die mit Sudo installiert wird. Apt-get install Eclipse in Ubuntu Aber ich habe eine Lösung gefunden, die Die Methode wird von der am höchsten bewerteten Lösung und der zweiten zusammen übernommen. Was ich getan habe, damit es funktioniert, wird unten beschrieben. (Beachten Sie, dass die anderen Schritte wie das Erstellen eines C++ - Projekts usw. der Einfachheit halber ignoriert werden.)

Nachdem Sie das C++ - Projekt erstellt haben

(1) C/C++ - Allgemein -> Pfade und Symbole -> Symbole -> GNU C++. Klicken Sie auf "Hinzufügen ..." und fügen Sie GXX_EXPERIMENTAL_CXX0X (fügen Sie zwei Unterstriche hinzu und fügen Sie sie voran) in "Name" ein und lassen Sie "Value" leer.

(2) Suchen Sie unter C/C++ Build (in den Projekteinstellungen) den Preprozessor-Include-Pfad und wechseln Sie zur Registerkarte "Provider". Deaktivieren Sie alle Einstellungen außer CDT GCC Builtin Compiler Settings. Dann heben Sie die Share-Einstellungen auf. Fügen Sie dem Textfeld Command die Option -std = c ++ 11 hinzu, um die Compilerspezifikationen abzurufen

Nachdem die Schritte 2 und 2 nur ausgeführt wurden, funktioniert es, der Eclipse ist in der Lage, das unique_ptr aufzulösen. Ich weiß nicht, warum diese Lösung funktioniert, hoffe, dass sie den Menschen helfen kann.

2
doody1986

Eclipse C/C++ erkennt das Symbol std::unique_ptr nicht, obwohl Sie den C++ 11-Speicherheader in Ihre Datei aufgenommen haben. 

Wenn Sie den C++ - Compiler GNU verwenden, habe ich Folgendes getan:

Projekt -> Eigenschaften -> C/C++ - Allgemein -> Präprozessor-Include-Pfade -> GNU C++ -> CDT-Benutzereinstellungen

  1. Klicken Sie auf die Schaltfläche "Hinzufügen ..."

  2. Wählen Sie "Preprozessor-Makro" aus dem Dropdown-Menü

    Name: __cplusplus     Value:  201103L
    
  3. Klicken Sie auf Übernehmen und dann auf OK, um zu Ihrem Projekt zurückzukehren

  4. Dann erstellen Sie Ihren C++ - Index neu: Projekte -> C/C++ - Index -> Neuaufbau

1
Rubens Gomes

Für mich am Eclipse Neon folgte ich Trismegistos Antwort hier oben , YET habe ich auch einen zusätzlichen Schritt hinzugefügt: 

  • Gehen Sie zu Projekt -> Eigenschaften -> C++ - Allgemein -> Präprozessor Include-Pfade, Makros usw. -> Anbieter -> Eingebaute CDT Cross GCC-Compiler-Einstellungen, fügen Sie das Flag "-std = c ++ 11 "

Klicken Sie auf "Übernehmen" und "OK".

Prost,

Kerl.

1
Guy Avraham

Um Unterstützung für C++ 14 in Eclipse Luna zu erhalten, können Sie die folgenden Schritte ausführen:

  • Fügen Sie in C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings "-std = c ++ 14" hinzu.
  • Fügen Sie in C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous "-std = c ++ 14" hinzu.

Indizieren Sie Ihr Projekt erneut, und starten Sie Eclipse möglicherweise neu. Es sollte wie erwartet funktionieren.

0
Jerome
  • klicken Sie mit der rechten Maustaste auf das Projekt und gehen Sie zu "Eigenschaften".
  • C/C++ Build -> Einstellungen -> Tool-Einstellungen -> GCC C++ - Compiler -> Verschiedenes -> Andere Flags. Setzen Sie -lm am Ende des Textfelds für andere Flaggen und OK.
0
Sameera Chanaka

Weder die Hack- noch die Cleaner-Version funktionieren für Indigo. Der Hack wird ignoriert und die erforderlichen Konfigurationsoptionen fehlen. Ohne ersichtlichen Grund funktionierte Build, nachdem es nicht funktioniert hatte, und gab keinen nützlichen Grund an. Zumindest von der Kommandozeile bekomme ich reproduzierbare Ergebnisse.

0
Jerry Miller

Ich hatte ein ähnliches Problem mit Eclipse C++ 2019-03 für ein gemischtes C- und C++ - Projekt, das std :: optional und std :: swap verwendete. Was für mich funktioniert hat, war das. Entfernen Sie im Projekt Properties-> C/C++ Build-> Settings-> Tool Settings-> Cross G ++ Compiler -std = gnu ++ 17 aus Miscellaneous und fügen Sie es stattdessen in Dialect-> Other Dialect Flags ein.

0
dc42

Ich habe es auf einem Mac so gelöst. Ich habe Homebrew verwendet, um die neueste Version von gcc/g ++ zu installieren. Sie landen in/usr/local/bin mit include in/usr/local/include.

Ich habe eine CD in/usr/local/bin geschrieben und einen Symlink von g ++ @ 7 gemacht, nur um g ++ zu bewirken, da dieses @-Bit nervig ist.

Dann ging ich zu MyProject -> Eigenschaften -> C/C++ Build -> Einstellungen -> GCC C++ Compiler und änderte den Befehl von "g ++" in "/ usr/local/bin/g ++". Wenn Sie sich dafür entscheiden, den symbolischen Link nicht zu erstellen, können Sie spezifischer sein.

Machen Sie dasselbe für den Linker.

Übernehmen und anwenden und schließen. Lassen Sie den Index neu aufbauen. Für eine Weile gab es eine gewaltige Anzahl von Fehlern, aber ich denke, das war beim Erstellen von Indizes. Während ich die Fehler herausfand, verschwanden sie ohne weitere Maßnahmen.


Ich denke, ohne zu bestätigen, dass Sie auch in Eclipse -> Eigenschaften -> C/C++ -> Core Build Toolchains gehen und diese mit unterschiedlichen Pfaden bearbeiten könnten, aber ich bin nicht sicher, was dies tun wird.

0
Joseph Larson