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?
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.
-std=c++0x
(oder für neuere Compilerversion -std=c++11
am Ende. ... anstelle von GCC C++ - Compiler habe ich auch Cygwin-Compiler__GXX_EXPERIMENTAL_CXX0X__
(stellen Sie sicher, dass zwei Unterstriche angehängt und vorangestellt werden) in "Name" ein und lassen Sie "Wert" leer.Es gibt jetzt auch eine Beschreibung in Eclipse FAQ: Eclipse-FAQ/C++ 11 Features .
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.
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.
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".
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:
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.
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
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
Ich hatte das gleiche Problem bei meiner Eclipse Juno. Diese Schritte haben das Problem gelöst:
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
. Für Eclipse CDT Kepler ist es mir gelungen, das std::thread
nicht aufgelöste Symbol loszuwerden:
Gehen Sie zu Einstellungen-> C/C++ -> Erstellen-> Einstellungen
Wählen Sie die Registerkarte Discovery
Wählen Sie die Einstellungen für den integrierten CDT-GCC-Compiler aus [Shared].
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}
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.
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.
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.
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.
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
Klicken Sie auf die Schaltfläche "Hinzufügen ..."
Wählen Sie "Preprozessor-Makro" aus dem Dropdown-Menü
Name: __cplusplus Value: 201103L
Klicken Sie auf Übernehmen und dann auf OK, um zu Ihrem Projekt zurückzukehren
Dann erstellen Sie Ihren C++ - Index neu: Projekte -> C/C++ - Index -> Neuaufbau
Für mich am Eclipse Neon folgte ich Trismegistos Antwort hier oben , YET habe ich auch einen zusätzlichen Schritt hinzugefügt:
Klicken Sie auf "Übernehmen" und "OK".
Prost,
Kerl.
Um Unterstützung für C++ 14 in Eclipse Luna zu erhalten, können Sie die folgenden Schritte ausführen:
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
"-std = c ++ 14" hinzu.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.
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.
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.
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.