Wie aktiviere ich die Unterstützung von C ++ 11 / C ++ 0x in Eclipse CDT?


210

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

Dies ist ein Beispiel für einen Teil des 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 einwandfrei. Wie kann Eclipse aufhören, sich über diese Art von Fehlern zu beschweren?


12
Zumindest sollte es seinstd::unique_ptr<char[]>
Cubbi

Ich bin mir nicht sicher, ob das richtig ist - char [] kann in char * konvertiert werden und unique_ptr <char> ist ein Zeiger auf char, wie char *
Nick

1
Würde nicht unique_ptr<char>anrufen delete, was falsch ist, da es mit erstellt wurde new[]?
Dietrich Epp

6
@ Nick: Nein, er hat recht. Die Art und Weise Sie es geschrieben wird dazu führen , deletegenannt zu werden, wenn Sie brauchen delete[] genannt. Das unique_ptr<char>setzt voraus, dass es einen Zeiger bekommt, der mit gelöscht wird delete. unique_ptr<char[]>erwartet ein Array, das delete[]korrekt gelöscht wird.
Nicol Bolas

Antworten:


224

Ich habe diesen Artikel im Eclipse-Forum gefunden, bin nur diesen Schritten gefolgt und er 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 dem Erstellen mit der rechten Maustaste auf das Projekt und gehen Sie zu "Eigenschaften".
  • C / C ++ Build -> Einstellungen -> Werkzeugeinstellungen -> GCC C ++ - Compiler -> Verschiedenes -> Andere Flags. Put -std=c++0x(oder für neuere Compiler-Version -std=c++11am 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__in "Name" ein (stellen Sie sicher, dass zwei Unterstriche angehängt und vorangestellt werden), und lassen Sie "Wert" leer.
  • Klicken Sie auf Übernehmen, tun Sie, was immer Sie möchten, und klicken Sie dann auf OK.

Eine Beschreibung hierzu finden Sie jetzt auch in den Eclipse-FAQ: Eclipse-FAQ / C ++ 11-Funktionen .

Eclipse-Bildeinstellung


2
Ja, es hat funktioniert! Stellen Sie jedoch sicher, dass Sie GXX_EXPERIMENTAL_CXX0X zwei Unterstriche voranstellen und anhängen - ich werde dies in der Zwischenzeit akzeptieren
Nick

5
Hat dies falsche Editorfehler beseitigt? Ich habe kein Problem mit dem Kompilieren und neue Standardtypen werden erkannt, aber ich kann Editor-Syntaxfehler für Bereiche, die auf Schleifen und R-Wert-Referenzen basieren, nicht beseitigen &&.
Juanchopanza

7
Die natürliche Folgefrage lautet nun: Können wir unseren Workflow optimieren, indem wir diese spezifischen C ++ - Projekteinstellungen in einer neuen Eclipse-Projektvorlage speichern, z. B. "C ++ 11-Projekt"?
Nordlöw

38
Hinweis: Für alle, die nach der Antwort für Juno suchen, funktioniert dies nicht .
Christopher

4
Für Kepler / Juno findet sich die Lösung in dieser Antwort . Es ist in der Bearbeitung zu Johan Lundbergs Antwort unten veröffentlicht, aber ich notiere es auch hier, um die akzeptierte Antwort vollständiger zu machen.
Inusable Lumière

150

Anleitung für Eclipse CDT 4.4 Luna und 4.5 Mars

Konfigurieren Sie vor dem Erstellen eines Projekts zunächst den Eclipse-Syntaxparser:

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

im Textfeld mit dem Titel Command to get compiler specsanhä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 Projekte, die erstellt wurden 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

Setzen Sie -std=c++11in Textfeld Titel other dialect flagsoder wählen Sie ISO C++11aus der Language standardDrop - Down.

Für CMake-Projekt

Generieren Sie Eclipse-Projektdateien (in Ihrem Projekt)

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

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

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

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

Letzter gemeinsamer Schritt

Eclipse neu kompilieren, neu generieren Project-> C/C++ Indexund neu starten.


1
Funktionierte auch ohne einen Neustart der Sonnenfinsternis einwandfrei. Danke dir.
Prasannak

Danke dir. Auch bei Luna hat mir keine andere Antwort geholfen.
Mohamed El-Nakib

Funktioniert immer noch auf dem Mars. Mehr als eine gute Antwort! Wenn ich diese Antwort nur zweimal abstimmen könnte!
Mohamed El-Nakib

Vielen Dank! Dies ist die hilfreichste Antwort auf das Problem, auf das ich gestoßen bin (4.5)
AturSams

2
Für Eclipse Neon.3 mit einem C ++ - Makefile-Projekt war die Projekteinstellung, die hinzugefügt werden -std=c++11sollte Project Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:. Fügen Sie Ihre -std=c++11dazu hinzu. Ich hatte es in den globalen Arbeitsbereichseinstellungen als Vorschlag festgelegt, aber es wurde nicht an den oben beschriebenen Speicherort kopiert, als ich ein neues MakefileProjekt erstellte.
BeeOnRope

112

Update 2016:

Ab gcc 6 ( Änderungen ) ist der Standard-C ++ - Dialekt C ++ 14. Das bedeutet, dass Sie mit Eclipse nichts mehr tun müssen, es sei denn, Sie benötigen ausdrücklich einen neueren oder älteren Dialekt als.

Für Luna und Mars

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

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

Fenster -> Einstellungen -> C / C ++ -> Erstellen -> Einstellungen -> Ermittlung -> CDT GCC-Einstellungen für den integrierten Compiler

im Textfeld mit dem Titel Befehl zum Abrufen der Compiler-Spezifikationen anhängen -std=c++14 2. Projekt erstellen, die Konfiguration hängt davon ab, welche Art von Projekt Sie erstellt haben:

Für Projekte, die erstellt wurden 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 -> Werkzeugeinstellungen -> GCC C ++ Compiler -> Dialekt

Setzen Sie -std=c++14in die Textbox berechtigt , andere Dialekt Flaggen oder wählen Sie ISO C ++ 11 von der Sprache Standard Dropdown.

Es gibt jetzt einen neuen Weg, dies ohne den GXX_EXPERIMENTAL-Hack zu lösen.

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

Unter 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 Präprozessor-Einschlusspfad und wechseln Sie zur Registerkarte Anbieter . Deaktivieren Sie alle außer den CDT GCC Builtin Compiler-Einstellungen. Deaktivieren Sie dann die Einträge für Freigabeeinstellungen…. Fügen Sie die Option -std = c ++ 11 zum Textfeld Command hinzu, um die Compilerspezifikationen abzurufen.

  2. Gehen Sie zu Pfaden und Symbolen. Klicken Sie unter Symbole auf Standardeinstellungen wiederherstellen und dann anwenden.


Anmerkungen:

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

[Eigenwerbung]: Ich habe meine eigenen detaillierteren Anweisungen basierend auf den oben genannten geschrieben. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

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


3
Vielen Dank, aber es hat mir nicht geholfen, C ++ 11-Referenzen zu lösen. Das Programm wird korrekt kompiliert, aber Eclipse kann sie nicht auflösen. Wenn ich "Array" überprüfe, wird #ifndef __GXX_EXPERIMENTAL_CXX0X__true zurückgegeben und der darunter liegende Code wird nicht analysiert. Wenn ich __GXX_EXPERIMENTAL_CXX0X__Projektsymbole hinzufüge , wird das Array aufgelöst, aber die Referenzen meines Projekts werden durcheinander gebracht. Was könnte hier das Problem sein?
Halil Kaskavalci

1
Ich denke, es ist ein Fehler. Ich habe es so neu produziert: Neues Projekt eröffnen. Aktivieren Sie die C ++ 11-Funktionen. Fügen Sie eine zufällige Klasse mit einer öffentlichen Variablen hinzu. Erstellen Sie einen Vektor dieser zufälligen Klasse. Holen Sie sich den Iterator. Versuchen Sie, auf die öffentliche Variable zuzugreifen. Entweder ist mein Arbeitsbereich beschädigt oder es gibt einen Fehler in Eclipse, der dies nicht analysieren kann.
Halil Kaskavalci

1
@ HalilKaskavalci Ich habe den gleichen Fehler gefunden. Wenn ich den Editor für c ++ 11 einstelle, können Iteratoren nicht aufgelöst werden. Wenn nicht, kann std :: unique_ptr nicht aufgelöst werden. Wirklich nervig, da ich beide benutze.
Kian

1
@ Kian Ich habe den Fehler gemeldet. bugs.eclipse.org/bugs/show_bug.cgi?id=397027 . Es ist ziemlich nervig und ich habe angefangen, Boost-Bibliotheken zu verwenden, sie erzeugen keinen Fehler :)
Halil Kaskavalci

1
funktioniert bei mir! Danke dir! Ich habe -std = c ++ 11 zu Anbietern hinzugefügt und Standardeinstellungen in Symbolen wiederhergestellt. Ich denke, die Wiederherstellung der Standardeinstellung in Symbolen rettet mich. Jetzt wird unique_ptr aufgelöst.
Denis Zaikin

20

Für die neueste (Juno) Eclipse-CD hat das Folgende für mich funktioniert, keine Notwendigkeit, sich __GXX_EXPERIMENTAL_CXX0X__selbst zu deklarieren . Dies funktioniert für den CDT-Indexer und als Parameter für den Compiler:

"Ihr Projektname" -> Rechtsklick -> Eigenschaften:

C / C ++ Allgemein -> Präprozessor-Einschlusspfade, Makros usw. -> Wechseln Sie zur Registerkarte "Anbieter":

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

  • Schalten Sie alle Anbieter aus und wählen Sie einfach "CDT GCC Built-in Compiler Settings".

  • Deaktivieren Sie "Einstellungseinträ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 Anwenden und schließen Sie die Optionen

  • Erstellen Sie den Index neu

Jetzt sollten alle C ++ 11-bezogenen Dinge vom Indexer korrekt aufgelöst werden.

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


Es werden immer noch dieselben fehlerhaften Editorwarnungen wie in Typ 'std :: thread'
Scott Stensland

2
Sie müssen einmal mit den neuen Einstellungen kompilieren, damit der Parser "lernt", dass das Flag std = c ++ 11 gesetzt ist
Andreas

Abhängig von der Compilerversion kann es erforderlich sein, -std = c ++ 0x anstelle von -std = c ++ 11 (z. B.
debian wheezy

15

Ich hatte das gleiche Problem mit meiner Eclipse Juno. Diese Schritte lösten das Problem:

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

2
Diese Antwort sollte akzeptiert werden, da sie auch für Makefile-Projekte funktioniert!
Omikron

@ Jerk31 dies funktioniert nicht für Eclipse Juno unter Windows (für mich), ich sehe immer noch diese beanstandeten unnötigen Fehler, obwohl die Binärdatei gut funktioniert. Bitte hilf mir!!!
Überaustausch

Es tut mir wirklich leid, dass ich Ihnen unter Windows nicht helfen kann. Ich habe nicht die Möglichkeit, ein C ++ - Projekt unter diesem Betriebssystem auszuführen. Ich wünsche Ihnen alles Gute und viel Glück!
Jerome

13

Für Eclipse CDT Kepler hat es mir geholfen, std::threadungelöste Symbole loszuwerden :

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

  2. Wählen Sie die Registerkarte Erkennung

  3. Wählen Sie CDT GCC Built-in Compiler Settings [Shared]

  4. Fügen Sie -std = c ++ 11 zum Feld "Befehl zum Abrufen der Compilerspezifikationen:" hinzu, z.

$ {BEFEHL} -E -P -v -dD -std = c ++ 11 $ {EINGÄNGE}

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

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


Für Eclipse Version: 2019-09 R. Diese Lösung hat bei mir funktioniert, ich habe jedoch viel Zeit zuvor verbracht. Das Problem war in den Builder-Einstellungen: Projekt -> Eigenschaften -> C / C ++ - Build: Wählen Sie auf der Registerkarte "Builder-Einstellungen" die Option "Interner Builder" für "Builder-Typ".
grekhss

5

Ich kann noch keinen Kommentar abgeben und schreibe meine eigene Antwort:

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

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

Um das Erstellen mit stdc ++ 11 zu ermöglichen, muss ein spezifisches Flag für den Compiler hinzugefügt werden. Sie können dies über Projekteigenschaften tun. Projekteigenschaften ändern RMBund Project propertiesoder ALT + ENTER. Dann C / C ++ Build -> Einstellungen -> Werkzeugeinstellungen -> GCC C ++ - Compiler -> Verschiedenes -> Andere Flags. Setzen Sie -std = c ++ 11 am Ende der Zeile, für GCC sieht es ungefähr so ​​aus : -c -fmessage-length=0 -std=c++11. Durch Hinzufügen von -stdc ++ 11 wird der Flag Compiler (GCC) deklariert__GXX_EXPERIMENTAL_CXX0X__ von selbst.

An diesem Punkt können Sie ein Projekt mit der ganzen Güte von C ++ 11 erstellen.

Das Problem ist, dass Eclipse über einen eigenen Parser verfügt, der nach Fehlern sucht. Deshalb werden im Eclipse-Editor immer noch alle bösen Fehler angezeigt, während Sie gleichzeitig ein Projekt ohne Fehler erstellen und ausführen können. Es gibt eine Möglichkeit, dieses Problem zu lösen, indem das __GXX_EXPERIMENTAL_CXX0X__Flag für das Projekt explizit deklariert wird. Dies kann man tun (genau wie Carsten Greiner sagte): C / C ++ Allgemein -> Pfade und Symbole -> Symbole -> GNU C ++. Klicken Sie auf "Hinzufügen ..." und fügen Sie " __GXX_EXPERIMENTAL_CXX0X__Unterstrich anhängen und vorangestellt" in "Name" ein und lassen Sie "Wert" leer. Und jetzt ist der zusätzliche Teil, den ich im Kommentar zur ersten Antwort behandeln wollte, gehen Sie zu: C / C ++ Allgemein -> Präprozessor-Einschlusspfad-Makros usw. -> Anbieter und AuswählenCDT Managed Build Setting EntriesKlicken Sie dann auf ANWENDEN und kehren Sie zur Registerkarte Einträge zurück. Unter GNU C ++ sollte jetzt CDT Managed Build Setting Entries vorhanden sein. Überprüfen Sie, ob im Inneren definiert ist, __GXX_EXPERIMENTAL_CXX0X__ob es sich um -> ANWENDEN handelt, und erstellen Sie den Index neu. An diesem Punkt sollte alles in Ordnung sein.


3

Ich hatte auch einige 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 (das Hinzufügen von -pthread für den Linker löst dieses Problem). Wie auch immer, endlich haben diese Einstellungen gut funktioniert:

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

-std=c++11

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

Für den Linker fügte dasselbe Fenster, Verschiedenes, Linker-Flags, das hinzu

-pthread

Flagge. Einstellungen für freigegebene Bibliotheken, Name des freigegebenen Objekts, fügen Sie die 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-Einschlusspfade .. -> Registerkarte Anbieter: Aktivieren

Integrierte CDT GCC-Compilereinstellungen

und für "Befehl zum Abrufen der Compilerspezifikationen" fügen Sie das hinzu

-std=c++11

Flagge. Deaktivieren Sie Freigeben. Klicken Sie auf Übernehmen.

CDT verwaltet Build-Einstellungseinträge. Überprüfen Sie dies ebenfalls. Deaktivieren Sie die beiden anderen. Klicken Sie auf Übernehmen.

Wenn Sie zur Registerkarte "Einträge" zurückkehren und GNU C ++ CDT die Einträge für Build-Einstellungen verwaltet, sollten Sie nun Ihre hinzugefügten Einträge sehen

__GXX_EXPERIMENTAL_CXX0X__

Eintrag.

Das ist es. Beim Codieren tippen

std::

kann jetzt die Thread-Klasse jetzt automatisch vervollständigen, Builds sollten gut funktionieren und es sollte keine geben

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

zur Laufzeit.


Es war der Project -> Properties -> C/C++ Build -> Settings -> MiscellaneousSchritt, der für mich funktioniert hat. Vielen Dank: D
Jake88

2

Ich weiß nicht, ob es nur ich ist. Die Lösung mit dem höchsten Rang funktioniert bei mir nicht. Meine Eclipse-Version ist eine normale Eclipse-Plattform, die mithilfe von sudo apt-get install eclipse in Ubuntu installiert wurde. Ich habe jedoch eine Lösung gefunden, die die Methode gemeinsam übernimmt Sowohl von der Lösung mit dem höchsten Rang als auch von der zweiten Lösung wird im Folgenden beschrieben, was ich getan habe, damit es funktioniert (Beachten Sie, dass die anderen Schritte wie das Erstellen eines C ++ - Projekts usw. der Einfachheit halber ignoriert werden).

Sobald 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 (stellen Sie sicher, dass zwei Unterstriche angehängt und vorangestellt werden ) in "Name" ein und lassen Sie "Wert" leer.

(2) Suchen Sie unter C / C ++ Build (in den Projekteinstellungen) den Präprozessor-Einschlusspfad und wechseln Sie zur Registerkarte Anbieter. Deaktivieren Sie alle außer den CDT GCC Builtin Compiler-Einstellungen. Deaktivieren Sie dann die Einträge für Freigabeeinstellungen…. Fügen Sie die Option -std = c ++ 11 zum Textfeld Command hinzu, um die Compilerspezifikationen abzurufen

Nachdem die obigen Schritte 2 und 2 ausgeführt wurden, funktioniert es. Die Eclipse kann das unique_ptr auflösen. Ich weiß nicht, warum diese Lösung funktioniert. Ich hoffe, dass sie Menschen helfen kann.


Das hat auch bei mir funktioniert (Eclipse Neon). Zuerst habe ich die Auswahl der anderen Anbieter nicht aufgehoben, was immer noch Probleme verursachte, aber die Auswahl aller anderen Anbieter als "CDT GCC Built-in Compiler Settings" und "CDT User Settings" hat funktioniert. Vielen Dank!
Zpon

2

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

Angenommen, Sie verwenden den GNU C ++ - Compiler, habe ich Folgendes getan, um Folgendes zu beheben:

Projekt -> Eigenschaften -> C / C ++ Allgemein -> Präprozessor-Einschlusspfade -> GNU C ++ -> CDT-Benutzereinstellungseinträge

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

  2. Wählen Sie "Präprozessor-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. Erstellen Sie dann Ihren C ++ - Index neu: Projekte -> C / C ++ - Index -> Neu erstellen


Dies ist die einzige Methode, die in Eclipse 2018-12 für mich funktioniert hat. Die "akzeptierte" Antwort usw. funktioniert 2018-12 nicht mehr.
David Steinhauer

1

Für mich auf Eclipse Neon folgte ich Trismegistos Antwort hier oben , NOCH habe ich noch einen zusätzlichen Schritt hinzugefügt:

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

Klicken Sie auf Übernehmen und auf OK.

Prost,

Kerl.


0
  • Klicken Sie mit der rechten Maustaste auf das Projekt und gehen Sie zu "Eigenschaften".
  • C / C ++ Build -> Einstellungen -> Werkzeugeinstellungen -> GCC C ++ - Compiler -> Verschiedenes -> Andere Flags. Setzen Sie -lm am Ende des Textfelds anderer Flags und klicken Sie auf OK.

Welche Version von Eclipse ist das?
Braiam

0

Weder der Hack noch die Cleaner-Version funktionieren für Indigo. Der Hack wird ignoriert und die erforderlichen Konfigurationsoptionen fehlen. Ohne ersichtlichen Grund begann der Build zu arbeiten, nachdem er nicht funktioniert hatte und keinen nützlichen Grund dafür lieferte. Zumindest über die Kommandozeile erhalte ich reproduzierbare Ergebnisse.


0

Führen Sie die folgenden Schritte aus, um Unterstützung für C ++ 14 in Eclipse Luna zu erhalten:

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

Indizieren Sie Ihr Projekt neu und starten Sie Eclipse schließlich neu. Es sollte wie erwartet funktionieren.


0

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

Ich habe eine CD in / usr / local / bin geschrieben und einen Symlink von g ++ @ 7 erstellt, was auch immer nur für g ++ ist, da dieses @ Bit nervt.

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 entscheiden, den symbolischen Link nicht zu erstellen, können Sie genauer sein.

Machen Sie dasselbe für den Linker.

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


Ich denke, ohne zu überprüfen, ob Sie auch in Eclipse -> Eigenschaften -> C / C ++ -> Core Build Toolchains gehen und diese mit unterschiedlichen Pfaden bearbeiten können, aber ich bin mir nicht sicher, was das bewirken wird.


0

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 dies. Entfernen Sie im Projekt Eigenschaften-> C / C ++ Build-> Einstellungen-> Werkzeugeinstellungen-> Cross G ++ Compiler -std = gnu ++ 17 aus Verschiedenes und fügen Sie es stattdessen in Dialekt-> Andere Dialektflags ein.


0

Wenn ich einen Cross-Compiler verwende, bekomme ich oft fortschrittliche benutzerdefinierte Build-Systeme, die von Kollegen sorgfältig erstellt wurden. Ich verwende "Makefile-Projekt mit vorhandenem Code", sodass die meisten anderen Antworten nicht zutreffen.

Zu Beginn des Projekts muss ich angeben, dass ich im Assistenten für "Makefile-Projekt mit vorhandenem Code" einen Cross-Compiler verwende. Das Ärgerliche ist, dass in den letzten 10 Jahren die Cross-Compiler-Schaltfläche in diesem Assistenten nicht auffordert, wo sich der Cross-Compiler befindet. In einem Schritt, der das C ++ - Problem und das Cross-Compiler-Problem behebt, muss ich zur Registerkarte "Anbieter" wechseln, wie in Antworten wie @ravwojdyla oben erwähnt. Der Anbieter, den ich auswählen muss, ist jedoch der Cross-Compiler-Anbieter. Dann gebe ich im Befehlsfeld den vollständigen Pfad zum Compiler ein und füge -std = gnu ++ 11 für den C ++ - Standard hinzu, für den ich Unterstützung haben möchte. Dies funktioniert so gut wie erwartet.

Sie können dies für ein vorhandenes Projekt tun. Möglicherweise müssen Sie nur den Indexer erneut ausführen.

Ich musste nie das experimentelle Flag hinzufügen oder die Definition von __cplusplus überschreiben. Das einzige ist, wenn ich eine beträchtliche Menge an modernem C-Code habe, kann ich die C-spezifische Standardoption nirgends einsetzen.

Und wenn die Dinge wirklich schlecht laufen, kann das Abrufen eines Parser-Protokolls mit diesem Befehl im Untermenü Indexer sehr informativ sein.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.