Jak włączyć obsługę C ++ 11 / C ++ 0x w Eclipse CDT?


210

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

To jest przykład fragmentu kodu C ++ 11:

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

Edytor Eclipse narzeka na:

Function 'unique_ptr' could not be resolved

Kompilacja Makefile działa dobrze. Jak sprawić, by Eclipse przestał narzekać na tego rodzaju błędy?


12
Przynajmniej powinno byćstd::unique_ptr<char[]>
Cubbi

Nie jestem pewien, czy jest to poprawne - char [] można zamienić na char *, a unique_ptr <char> jest wskaźnikiem do char, jak char *
Nick

1
Nie unique_ptr<char>zadzwoni delete, co jest złe, ponieważ zostało utworzone new[]?
Dietrich Epp

6
@Nick: Nie, ma rację. Sposób, w jaki to napisałeś, spowoduje, że deletezostaniesz wezwany, kiedy będziesz potrzebować delete[] . unique_ptr<char>Zakłada, że robi się wskaźnik, który zostanie usunięty z delete. unique_ptr<char[]>oczekuje tablicy, która zostanie delete[]poprawnie usunięta .
Nicol Bolas,

Odpowiedzi:


224

Znalazłem ten artykuł na forum Eclipse, po prostu wykonałem te kroki i działa on dla mnie. Używam Eclipse Indigo 20110615-0604 w systemie Windows z instalacją Cygwin.

  • Stwórz nowy projekt C ++
  • Domyślne opcje dla wszystkiego
  • Po utworzeniu kliknij prawym przyciskiem myszy projekt i przejdź do „Właściwości”
  • Kompilacja C / C ++ -> Ustawienia -> Ustawienia narzędzi -> Kompilator GCC C ++ -> Różne -> Inne flagi. Umieść -std=c++0x(lub dla nowszej wersji kompilatora -std=c++11na końcu. ... zamiast GCC C ++ Compiler Mam również kompilator Cygwin
  • C / C ++ Ogólne -> Ścieżki i symbole -> Symbole -> GNU C ++. Kliknij „Dodaj ...” i wklej __GXX_EXPERIMENTAL_CXX0X__(upewnij się, że dołączasz i wstawiasz dwa podkreślenia) w „Nazwa” i pozostaw puste pole „Wartość”.
  • Kliknij Zastosuj, rób wszystko, co chcesz, a następnie naciśnij OK.

Opis tego problemu znajduje się teraz w FAQ Eclipse : Funkcje Eclipse FAQ / C ++ 11 .

Ustawienie obrazu Eclipse


2
Tak, zadziałało! Ale pamiętaj, aby dodać i dodać dwa podkreślenia do GXX_EXPERIMENTAL_CXX0X - w międzyczasie zaakceptuję
Nick

5
Czy to usunęło fałszywe błędy edytora? Nie mam problemu z kompilacją, a nowe typy standardowe są rozpoznawane, ale nie mogę pozbyć się błędów składniowych edytora dla zakresu opartego na pętlach i referencjach wartości &&.
juanchopanza

7
Naturalne pytanie uzupełniające brzmi teraz: czy możemy zoptymalizować nasz przepływ pracy, zapisując te specyficzne ustawienia projektu C ++ w nowym szablonie projektu Eclipse, mówiąc „Projekt C ++ 11”?
Nordlöw

38
Uwaga: dla każdego, kto szuka odpowiedzi dla Juno, to nie działa .
Christopher

4
W przypadku kepler / juno rozwiązanie znajduje się w tej odpowiedzi . Jest opublikowany w odpowiedzi do odpowiedzi Johana Lundberga poniżej, ale zauważam to również tutaj, aby dopełnić przyjętą odpowiedź.
Inusable Lumière

150

Instrukcja dla Eclipse CDT 4.4 Luna i 4.5 Mars

Najpierw przed utworzeniem projektu skonfiguruj parser składni Eclipse:

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

w polu tekstowym zatytułowanym Command to get compiler specsappend-std=c++11

Teraz możesz utworzyć projekt, konfiguracja zależy od rodzaju utworzonego projektu:

Dla projektu utworzonego jako: Plik -> Nowy -> Projekt -> C / C ++ -> Projekt C ++

Kliknij utworzony projekt prawym przyciskiem myszy i otwórz

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

Umieść -std=c++11w polu tekstowym zatytułowanym other dialect flagslub wybierz ISO C++11z Language standardmenu rozwijanego.

Dla projektu CMake

Generuj pliki projektu zaćmienia (wewnątrz projektu)

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

Następnie zaimportuj wygenerowany katalog do Eclipse jako standardowy projekt Eclipse. Kliknij projekt prawym przyciskiem myszy i otwórz

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

włącz CDT GCC Build-in Compiler Settingsi przenieś go wyżej niż Contributed PathEntry Containers(Jest to ważne)

Ostatni wspólny krok

przekompiluj, zregeneruj Project-> C/C++ Indexi uruchom ponownie Eclipse.


1
Działa idealnie nawet bez konieczności ponownego uruchomienia zaćmienia. Dziękuję Ci.
prasannak

Dziękuję Ci. Żadna inna odpowiedź nie działała też dla mnie na Lunę.
Mohamed El-Nakib

Nadal działa na Marsie. Więcej niż świetna odpowiedź! Gdybym mógł zagłosować tylko na tę odpowiedź dwa razy!
Mohamed El-Nakib,

Dzięki! To jest najbardziej pomocna odpowiedź na problem, który napotkałem (4.5)
AturSams,

2
Dla Eclipse Neon.3, z projektu C ++ Makefile, ustawienie projekt, aby dodać -std=c++11do WAS Project Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:. Dołącz -std=c++11do tego. Miałem go jako sugerowany w globalnych ustawieniach przestrzeni roboczej, ale nie został skopiowany do miejsca, które opisałem powyżej, kiedy tworzyłem nowy Makefileprojekt.
BeeOnRope

112

Aktualizacja 2016:

Począwszy od gcc 6 ( zmiany ) domyślnym dialektem C ++ jest C ++ 14. Oznacza to, że chyba, że ​​wyraźnie potrzebujesz nowszego lub starszego dialektu niż, nie musisz już nic robić z zaćmieniem.

Dla Luny i Marsa

Ta sekcja wiki społeczności zawiera odpowiedź Trismegistos;

1. Przed utworzeniem projektu skonfiguruj parser składni Eclipse:

Okno -> Preferencje -> C / C ++ -> Kompilacja -> Ustawienia -> Odkrycie -> Ustawienia kompilatora wbudowanego CDT GCC

w polu tekstowym zatytułowanym Command, aby uzyskać specyfikację kompilatora, dodaj -std=c++14 2. Utwórz projekt, konfiguracja zależy od rodzaju utworzonego projektu:

Dla projektu utworzonego jako: Plik -> Nowy -> Projekt -> C / C ++ -> Projekt C ++

Kliknij utworzony projekt prawym przyciskiem myszy i otwórz

Właściwości -> Kompilacja C / C ++ -> Ustawienia -> Ustawienia narzędzi -> Kompilator GCC C ++ -> Dialekt

Umieść -std=c++14w polu tekstowym zatytułowanym inne flagi dialektu lub wybierz ISO C ++ 11 z menu rozwijanego Standard języka.

Jest teraz nowy sposób na rozwiązanie tego problemu bez hakowania GXX_EXPERIMENTAL.

W przypadku najnowszych wersji : (obecnie Juno i Kepler Luna ):

W nowszych wersjach Juno ustawienia znajdują się pod adresem Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ().

Starsze wersje 2012/2013:

  1. W obszarze Kompilacja C / C ++ (w ustawieniach projektu) znajdź ścieżkę dołączania preprocesora i przejdź do karty Dostawcy . Odznacz wszystko oprócz Ustawień wbudowanego kompilatora CDT GCC. Następnie odznacz opcję Udostępnij ustawienia… Dodaj opcję -std = c ++ 11 do pola tekstowego o nazwie Command, aby uzyskać specyfikacje kompilatora.

  2. Przejdź do ścieżek i symboli. W obszarze Symbole kliknij przywróć ustawienia domyślne , a następnie zastosuj.


Uwagi:

Eclipse jest wybredny, jeśli chodzi o zastosowanie hitu, musisz to zrobić za każdym razem, gdy opuszczasz kartę ustawień.

[Autopromocja]: W oparciu o powyższe napisałem własne, bardziej szczegółowe instrukcje. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

Dzięki użytkownikowi Nobodyna https://stackoverflow.com/a/13635080/1149664


3
Dziękuję, ale to nie pomogło mi rozwiązać odniesienia do c ++ 11. Program kompiluje się poprawnie, ale Eclipse nie może ich rozwiązać. Kiedy zaznaczę „tablica”, #ifndef __GXX_EXPERIMENTAL_CXX0X__zwraca true, a kod poniżej nie jest analizowany. Kiedy dodam __GXX_EXPERIMENTAL_CXX0X__do symboli projektu, tablica zostaje rozwiązana, ale odniesienia do mojego projektu zostają pomieszane. W czym może być problem?
Halil Kaskavalci,

1
Myślę, że to błąd. Ponownie go wyprodukowałem: Otwórz nowy projekt. Włącz funkcje c ++ 11. Dodaj losową klasę ze zmienną publiczną. Utwórz wektor tej losowej klasy. Pobierz iterator. Spróbuj uzyskać dostęp do zmiennej publicznej. Albo mój obszar roboczy jest uszkodzony lub w środowisku Eclipse występuje błąd, który nie może go przeanalizować.
Halil Kaskavalci,

1
@HalilKaskavalci Znalazłem ten sam błąd. Jeśli ustawię edytor dla c ++ 11, iteratory nie mogą rozwiązać. Jeśli nie, std :: unique_ptr nie może rozwiązać. Naprawdę denerwujące, ponieważ używam obu.
Kian,

1
@Kian Zgłosiłem błąd. bugs.eclipse.org/bugs/show_bug.cgi?id=397027 . Jest to dość irytujące i zacząłem używać bibliotek doładowań, nie powodują błędu :)
Halil Kaskavalci

1
pracuje dla mnie! Dziękuję Ci! (zrobiłeś to przez odniesienie) Dodałem -std = c ++ 11 do dostawców i przywróciłem wartości domyślne w symbolach. Myślę, że przywrócenie wartości domyślnej w symbolach mnie ocala. Teraz wyjątkowy_ptr jest rozpatrywany.
Denis Zaikin

20

W przypadku najnowszego (Juno) zaćmienia cdt następujące działało dla mnie, nie muszę deklarować __GXX_EXPERIMENTAL_CXX0X__na sobie. Działa to w przypadku indeksatora CDT i jako parametru kompilatora:

„nazwa twojego projektu” -> kliknij prawym przyciskiem myszy -> właściwości:

C / C ++ Ogólne -> Preprocesor Uwzględnij ścieżki, makra itp. -> przejdź do zakładki o nazwie „Dostawcy”:

  • dla „Konfiguracja” wybierz „Zwolnij” (a następnie „debuguj”)

  • wyłącz wszystkich dostawców i po prostu wybierz „Ustawienia wbudowanego kompilatora CDT GCC”

  • odznacz „Udostępnij wpisy ustawień między projektami (dostawca globalny)”

  • w „Poleceniu pobrania specyfikacji kompilatora:„ dodaj ”-std = c ++ 11” bez cudzysłowów (może również działać z cudzysłowami)

  • naciśnij Zastosuj i zamknij opcje

  • odbuduj indeks

Teraz wszystkie rzeczy związane z c ++ 11 powinny być poprawnie rozwiązane przez indeksatora.

win7 x64, najnowsze oficjalne zaćmienie z cdt mingw-w64 gcc 4.7.2 z projektu mingwbuilds na sourceforge


nadal pojawia się takie samo błędne ostrzeżenie edytora, jak w przypadku typu „std :: thread” nie można było rozwiązać, mimo że kompiluje się i wykonuje OK
Scott Stensland

2
musisz raz skompilować z nowymi ustawieniami, więc parser „dowie się”, że ustawiona jest flaga std = c ++ 11
Andreas

w zależności od wersji kompilatora może być konieczne dodanie -std = c ++ 0x zamiast -std = c ++ 11 (np. debian wheezy)
xmoex

15

Miałem ten sam problem na moim Eclipse Juno. Te kroki rozwiązały problem:

  • Idź do Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols].
  • Dodaj symbol: __cplusplus o wartości 201103L

2
Należy zaakceptować odpowiedź, ponieważ działa również w projektach Makefile!
omikron,

@ Jerk31 to nie działa dla Eclipse Juno działającego w systemie Windows (dla mnie), nadal widzę te narzekane niepotrzebne błędy, pomimo że plik binarny działa poprawnie. Proszę pomóż mi!!!
przeeksponowanie

Naprawdę przepraszam, nie mogę ci pomóc w systemie Windows. Nie mam okazji spróbować wykonać żadnego projektu C ++ w tym systemie operacyjnym. Życzę powodzenia i powodzenia!
Jerome

13

Dla Eclipse CDT Kepler to, co pomogło mi pozbyć się std::threadnierozwiązanego symbolu, to:

  1. Przejdź do Preferencje-> C / C ++ -> Kompilacja-> Ustawienia

  2. Wybierz kartę Wykrywanie

  3. Wybierz ustawienia wbudowanego kompilatora CDT GCC [Shared]

  4. Dodaj -std = c ++ 11 do pola „Polecenie, aby uzyskać specyfikacje kompilatora:”, takie jak:

$ {COMMAND} -E -P -v -dD -std = c ++ 11 $ {WEJŚCIA}

  1. Ok i Przebuduj Indeks dla projektu.

Dodanie -std=c++11do projektu Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Flagi nie wystarczyło dla Keplera, jednak wystarczyło dla starszych wersji, takich jak Helios.


Dla wersji Eclipse: 2019-09 R. To rozwiązanie działało dla mnie, jednak spędziłem dużo czasu wcześniej. Problem polegał na ustawieniach Konstruktora: Projekt -> Właściwości -> Kompilacja C / C ++: w zakładce „Ustawienia Konstruktora” wybierz „Konstruktor wewnętrzny” dla „Typu Konstruktora”.
grekhss

5

Nie mogę jeszcze komentować, więc piszę własną odpowiedź:

Jest powiązany __GXX_EXPERIMENTAL_CXX0X__i dotyczy Eclipse Juno i CDT 8.x.

Niektóre części tej odpowiedzi są już zawarte w innych odpowiedziach, ale chcę, aby były spójne.

Aby umożliwić kompilację przy użyciu stdc ++ 11, należy dodać specyficzną flagę dla kompilatora. Możesz to zrobić za pomocą właściwości projektu. Aby zmodyfikować właściwości projektu RMBi Project propertieslub ALT + ENTER. Następnie C / C ++ Build -> Ustawienia -> Ustawienia narzędzi -> Kompilator GCC C ++ -> Różne -> Inne flagi. Umieścić -std = c ++ 11 na końcu linii, dla GCC będzie to wyglądać mniej więcej tak: -c -fmessage-length=0 -std=c++11. Dodając -stdc ++ 11 kompilator flag (GCC) zadeklaruje__GXX_EXPERIMENTAL_CXX0X__ sam .

W tym momencie możesz zbudować projekt wykorzystując wszystkie zalety C ++ 11.

Problem polega na tym, że Eclipse ma własny parser do sprawdzania błędów - dlatego wciąż otrzymujesz wszystkie nieprzyjemne błędy w edytorze Eclipse, a jednocześnie możesz budować i uruchamiać projekt bez żadnych. Istnieje sposób na rozwiązanie tego problemu poprzez jawne zadeklarowanie __GXX_EXPERIMENTAL_CXX0X__flagi dla projektu, można to zrobić (tak jak powiedział Carsten Greiner): C / C ++ Ogólne -> Ścieżki i symbole -> Symbole -> GNU C ++. Kliknij „Dodaj ...” i przeszłość __GXX_EXPERIMENTAL_CXX0X__(pamiętaj o dołączeniu i dodaniu dwóch znaków podkreślenia) do „Nazwa” i pozostaw puste pole „Wartość”. A teraz jest dodatkowa część, którą chciałem omówić w komentarzu do pierwszej odpowiedzi, przejdź do: C / C ++ Ogólne -> Preprocesor Uwzględnij makra ścieżki itp. -> Dostawcy i wybierzCDT Managed Build Setting Entriesnastępnie kliknij ZASTOSUJ i wróć do zakładki Wpisy, w GNU C ++ powinny być teraz wpisy ustawień kompilacji zarządzanej przez CDT, sprawdź, czy wewnątrz jest zdefiniowane, __GXX_EXPERIMENTAL_CXX0X__jeśli jest -> ZASTOSUJ i przebuduj indeks, w tym momencie powinno być dobrze.


3

Miałem też kilka problemów (Ubuntu 13.04 64-bit, g ++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Wiele rzeczy wspomniano powyżej, przepraszam, że je powtarzam, ale dodatkowo miałem problemy z wykorzystaniem

std::thread

jako część c ++ 11 (dodanie -pthread dla linkera rozwiązuje ten problem). W końcu te ustawienia działały dobrze:

Projekt -> Właściwości -> Kompilacja C / C ++ -> Ustawienia -> Różne. Dodaj

-std=c++11

flaga dla kompilatorów GCC i G ++. Kliknij Zastosuj.

Dla linkera, to samo okno, Różne, Flagi Linkera, dodano

-pthread

flaga. Ustawienia biblioteki współużytkowanej, Nazwa obiektu współużytkowanego, dodaj

-Wl,--no-as-needed

flaga też. Kliknij Zastosuj.

C / C ++ Ogólne -> Ścieżki i symbole -> Symbole TAB, zaznaczono GNU C ++, Dodaj

__GXX_EXPERIMENTAL_CXX0X__

(bez wartości)

flaga. Kliknij Zastosuj.

C / C ++ Ogólne -> Preprocesor Uwzględnij ścieżki .. -> Karta Dostawcy: sprawdź

CDT GCC Ustawienia wbudowanego kompilatora

i w „Poleceniu pobrania specyfikacji kompilatora”, dodaj

-std=c++11

flaga. Odznacz Udostępnij. Kliknij Zastosuj.

CDT zarządza wpisami ustawień kompilacji, sprawdź to również. Odznacz pozostałe dwa. Kliknij Zastosuj.

Wracając do zakładki Wpisy, GNU C ++ CDT Zarządza Wpisami ustawień kompilacji, powinieneś teraz zobaczyć dodane

__GXX_EXPERIMENTAL_CXX0X__

wejście.

Otóż ​​to. Podczas pisania pisz na maszynie

std::

może teraz automatycznie uzupełniać klasę wątków, kompilacje powinny działać poprawnie i nie powinno być

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

W czasie wykonywania.


Był to Project -> Properties -> C/C++ Build -> Settings -> Miscellaneousdla mnie krok.
Wielkie

2

Nie wiem, czy to tylko ja, najwyżej ocenione rozwiązanie nie działa dla mnie, moja wersja zaćmienia jest po prostu normalną platformą zaćmienia zainstalowaną za pomocą sudo apt-get install eclipse w Ubuntu Ale znalazłem rozwiązanie, które przyjmuje metodę razem zarówno w przypadku rozwiązania najwyżej ocenianego, jak i drugiego, to, co zrobiłem, aby działało, jest opisane poniżej (zauważ, że inne kroki, takie jak tworzenie projektu C ++ itp. są ignorowane dla uproszczenia)

Po utworzeniu projektu C ++

(1) Ogólne informacje o C / C ++ -> Ścieżki i symbole -> Symbole -> GNU C ++. Kliknij „Dodaj ...” i wklej GXX_EXPERIMENTAL_CXX0X ( pamiętaj, aby dodać i wstawić dwa podkreślenia) do „Nazwa” i pozostaw „Wartość” puste.

(2) W obszarze C / C ++ Build (w ustawieniach projektu) znajdź ścieżkę dołączającą Preprocessor i przejdź do zakładki Providers. Odznacz wszystko oprócz Ustawień wbudowanego kompilatora CDT GCC. Następnie odznacz opcję Udostępnij ustawienia… Dodaj opcję -std = c ++ 11 do pola tekstowego o nazwie Command, aby uzyskać specyfikacje kompilatora

Po wykonaniu tylko 2 i 2 kroków, to działa, zaćmienie jest w stanie rozwiązać unikat_ptr, nie wiem, dlaczego to rozwiązanie działa, mam nadzieję, że może pomóc ludziom.


To również zadziałało dla mnie (zaćmienie neonu). Na początku nie odznaczyłem innych dostawców, co nadal powodowało problemy, ale odznaczyłem wszystkich innych dostawców niż „Ustawienia kompilatora wbudowanego CDT GCC” i „Ustawienia użytkownika CDT”. Dzięki!
zpon

2

Eclipse C / C ++ nie rozpoznaje tego symbolu, std::unique_ptrmimo że do pliku dołączono nagłówek pamięci C ++ 11.

Zakładając, że używasz kompilatora GNU C ++, to właśnie zrobiłem, aby to naprawić:

Projekt -> Właściwości -> Ogólne C / C ++ -> Preprocesor Uwzględnij ścieżki -> GNU C ++ -> Wpisy ustawień użytkownika CDT

  1. Kliknij przycisk „Dodaj ...”

  2. Wybierz „Makro Preprocesora” z menu rozwijanego

    Name: __cplusplus     Value:  201103L
  3. Kliknij Zastosuj, a następnie OK, aby wrócić do projektu

  4. Następnie odbuduj indeks C ++: Projekty -> Indeks C / C ++ -> Przebuduj


To jedyna metoda, która działała dla mnie w Eclipse 2018-12. Odpowiedź „zaakceptowana” itp. Nie działa już w latach 2018–2012.
David Steinhauer,

1

Dla mnie w Eclipse Neon podążyłem za odpowiedzią Trismegistos tutaj , ale dodałem również dodatkowy krok:

  • Przejdź do projektu -> Właściwości -> Ogólne C ++ -> Preprocesor Dołącz ścieżki, makra itp. -> Dostawcy -> Ustawienia kompilatora wbudowanego CDT Cross GCC, dołącz flagę „-std = c ++ 11”

Kliknij Zastosuj i OK.

Twoje zdrowie,

Chłopak.


0
  • kliknij projekt prawym przyciskiem myszy i przejdź do „Właściwości”
  • Kompilacja C / C ++ -> Ustawienia -> Ustawienia narzędzi -> Kompilator GCC C ++ -> Różne -> Inne flagi. Umieść -lm na końcu pola tekstowego innych flag i OK.

Co to za wersja Eclipse?
Braiam

0

Ani hack, ani czystsza wersja nie działają w Indigo. Włamanie jest ignorowane i brakuje wymaganych opcji konfiguracji. Bez wyraźnego powodu kompilacja zaczęła działać po tym, jak nie działała i nie podała żadnego przydatnego powodu. Przynajmniej z linii poleceń otrzymuję powtarzalne wyniki.


0

Aby uzyskać wsparcie dla C ++ 14 w Eclipse Luna, możesz wykonać następujące kroki:

  • W C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settingsdodaj „-std = c ++ 14”
  • W C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneousdodaj „-std = c ++ 14”

Ponownie zindeksuj swój projekt i ostatecznie zrestartuj Eclipse. Powinno działać zgodnie z oczekiwaniami.


0

Rozwiązałem to w ten sposób na komputerze Mac. Użyłem Homebrew do zainstalowania najnowszej wersji gcc / g ++. Wylądują w / usr / local / bin z włączeniami w / usr / local / include.

Włączyłem CD do katalogu / usr / local / bin i utworzyłem dowiązanie symboliczne z g ++ @ 7, cokolwiek do g ++, ponieważ @ bit jest denerwujący.

Potem poszedłem do MyProject -> Właściwości -> Kompilacja C / C ++ -> Ustawienia -> Kompilator GCC C ++ i zmieniłem polecenie z „g ++” na „/ usr / local / bin / g ++”. Jeśli zdecydujesz się nie tworzyć dowiązania symbolicznego, możesz być bardziej szczegółowy.

Zrób to samo dla linkera.

Zastosuj i zastosuj i zamknij. Niech odbuduje indeks. Przez jakiś czas pokazywał zniechęcającą liczbę błędów, ale myślę, że tak było podczas budowania indeksów. Podczas gdy myślałem o błędach, wszystkie zniknęły bez dalszych działań.


Myślę, że bez sprawdzenia, czy możesz również przejść do Eclipse -> Właściwości -> C / C ++ -> Core Build Toolchains i edytować te z różnymi ścieżkami, ale nie jestem pewien, co to zrobi.


0

Miałem podobny problem przy użyciu Eclipse C ++ 2019-03 dla mieszanego projektu C i C ++, który używał std :: opcjonalnego i std :: swap. Dla mnie to zadziałało. W projekcie Właściwości-> Kompilacja C / C ++-> Ustawienia-> Ustawienia narzędzi-> Kompilator Cross G ++, usuń -std = gnu ++ 17 z Inne i umieść go w Dialect-> Inne flagi dialektów.


0

Podczas korzystania z kompilatora krzyżowego często otrzymuję zaawansowane niestandardowe systemy budowania, starannie opracowane przez kolegów. Używam „Makefile Project z istniejącym kodem”, więc większość innych odpowiedzi nie ma zastosowania.

Na początku projektu muszę określić, że używam kompilatora krzyżowego w kreatorze dla „Makefile Project with Existing Code”. Irytujące jest to, że w ciągu ostatnich 10 lat przycisk kompilatora krzyżowego w tym kreatorze nie wyświetla monitu o podanie lokalizacji kompilatora krzyżowego. Tak więc w kroku, który rozwiązuje problem C ++ i problem kompilatora krzyżowego, muszę przejść do karty dostawców, jak wspomniano w odpowiedziach takich jak @ravwojdyla powyżej, ale dostawcą, którego muszę wybrać, jest dostawca kompilatora krzyżowego. Następnie w polu poleceń podaję pełną ścieżkę do kompilatora i dodaję -std = gnu ++ 11 dla standardu C ++, dla którego chcę mieć wsparcie. Działa to tak dobrze, jak można się spodziewać.

Możesz to zrobić dla istniejącego projektu. Jedyne, co możesz zrobić, to ponownie uruchomić indeksatora.

Nigdy nie musiałem dodawać flagi eksperymentalnej ani zastępować definicji __cplusplus. Jedyne, co mam, jeśli mam znaczną ilość nowoczesnego kodu C, nie mam gdzie umieścić standardowej opcji specyficznej dla C.

A gdy dzieje się naprawdę źle, uzyskanie dziennika analizatora składni za pomocą tego polecenia w podmenu Indeksator może być bardzo pouczające.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.