Bagaimana cara mengaktifkan dukungan C ++ 11 / C ++ 0x di Eclipse CDT?

210

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

Ini adalah contoh dari sepotong kode C ++ 11:

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

Editor Eclipse mengeluh tentang:

Function 'unique_ptr' could not be resolved

Kompilasi Makefile berfungsi dengan baik. Bagaimana cara membuat Eclipse berhenti mengeluh tentang kesalahan semacam ini?

Nick
sumber
12
Paling tidak, itu seharusnyastd::unique_ptr<char[]>
Cubbi
Tidak yakin itu benar - char [] dapat dikonversi ke char * dan unique_ptr <char> adalah pointer ke char, seperti char *
Nick
1
Tidak akan unique_ptr<char>menelepon delete, yang mana yang salah karena dibuat dengan new[]?
Dietrich Epp
6
@Nick: Tidak, dia benar. Cara Anda menulisnya akan menyebabkan deletedipanggil, ketika Anda perlu delete[] dipanggil. The unique_ptr<char>mengasumsikan bahwa itu semakin pointer, yang akan dihapus dengan delete. unique_ptr<char[]>mengharapkan array, yang dihapus dengan delete[]benar.
Nicol Bolas

Jawaban:

224

Saya menemukan artikel ini di forum Eclipse, cukup ikuti langkah-langkah itu dan berhasil untuk saya. Saya menggunakan Eclipse Indigo 20110615-0604 di Windows dengan pengaturan Cygwin.

  • Buat proyek C ++ baru
  • Opsi default untuk semuanya
  • Setelah dibuat, klik kanan proyek dan pergi ke "Properties"
  • C / C ++ Build -> Pengaturan -> Pengaturan Alat -> GCC C ++ Compiler -> Miscellaneous -> Flags Lainnya. Masukkan -std=c++0x(atau untuk versi kompiler yang lebih baru -std=c++11di akhir. ... alih-alih GCC C ++ Compiler saya juga memiliki kompiler Cygwin
  • C / C ++ Umum -> Jalur dan Simbol -> Simbol -> GNU C ++. Klik "Tambah ..." dan tempel __GXX_EXPERIMENTAL_CXX0X__(pastikan untuk menambahkan dan menambahkan dua garis bawah) ke "Nama" dan biarkan "Nilai" kosong.
  • Tekan Terapkan, lakukan apa pun yang diminta Anda lakukan, lalu tekan OK.

Ada penjelasan tentang ini di Eclipse FAQ sekarang juga: Eclipse FAQ / C ++ 11 Fitur .

Pengaturan gambar gerhana

Carsten Greiner
sumber
2
Ya, itu berhasil! Tapi, pastikan untuk menambahkan & menambahkan dua garis bawah ke GXX_EXPERIMENTAL_CXX0X - Sementara itu saya akan menerimanya
Nick
5
Apakah ini menghapus kesalahan editor palsu? Saya tidak punya masalah dengan kompilasi, dan tipe std baru dikenali, tapi saya tidak bisa menghilangkan kesalahan sintaks editor untuk rentang berdasarkan untuk loop dan referensi nilai &&.
juanchopanza
7
Pertanyaan tindak lanjut alami sekarang menjadi: dapatkah kita mengoptimalkan alur kerja kita dengan menyimpan Pengaturan Proyek C ++ spesifik ini ke templat Proyek Eclipse baru yang mengatakan "Proyek C ++ 11"?
Nordlöw
38
Catatan: bagi siapa pun yang mencari jawaban untuk Juno, ini tidak berfungsi .
Christopher
4
Untuk kepler / juno, solusinya ditemukan dalam jawaban ini . Itu diposting dalam edit untuk balasan Johan Lundberg di bawah, tapi saya perhatikan di sini juga, untuk membuat jawaban yang diterima lebih lengkap.
Lumière yang tidak dapat digunakan
150

Instruksi Untuk Eclipse CDT 4.4 Luna dan 4.5 Mars

Pertama, sebelum membuat proyek, konfigurasikan parser sintaks Eclipse:

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

di kotak teks berjudul Command to get compiler specsappend-std=c++11

Sekarang Anda dapat membuat proyek, konfigurasi tergantung pada jenis proyek yang Anda buat:

Untuk proyek yang dibuat sebagai: File -> Baru -> Proyek -> C / C ++ -> Proyek C ++

Klik kanan pada proyek yang dibuat dan buka

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

Masukkan -std=c++11ke dalam kotak teks berjudul other dialect flagsatau pilih ISO C++11dari Language standarddrop down.

Untuk proyek CMake

Hasilkan file proyek gerhana (di dalam proyek Anda)

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

Kemudian impor direktori yang dihasilkan ke gerhana sebagai proyek gerhana standar. Klik kanan proyek dan buka

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

aktifkan CDT GCC Build-in Compiler Settingsdan pindahkan lebih tinggi dariContributed PathEntry Containers (Ini penting)

Langkah Umum Terakhir

kompilasi ulang, regenerasi Project-> C/C++ Indexdan mulai ulang Eclipse.

Trismegistos
sumber
1
Bekerja dengan sempurna bahkan tanpa perlu restart gerhana. Terima kasih.
prasannak
Terima kasih. Tidak ada jawaban lain yang bekerja untuk saya di Luna juga.
Mohamed El-Nakib
Masih Bekerja di Mars. Lebih dari jawaban yang bagus! Jika saya hanya bisa memilih jawaban ini dua kali!
Mohamed El-Nakib
Terima kasih! Ini adalah jawaban yang paling membantu untuk masalah yang saya temui (4.5)
AturSams
2
Untuk Eclipse Neon.3, dengan proyek C ++ Makefile, pengaturan proyek untuk ditambahkan -std=c++11adalah Project Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:. Tambahkan Anda -std=c++11untuk itu. Saya menetapkannya di pengaturan ruang kerja global seperti yang disarankan, tetapi itu tidak disalin ke lokasi yang saya uraikan di atas ketika saya membuat Makefileproyek baru .
BeeOnRope
112

Pembaruan 2016:

Mulai gcc 6 ( perubahan ), dialek C ++ default adalah C ++ 14. Itu berarti bahwa kecuali Anda secara eksplisit membutuhkan dialek yang lebih baru atau lebih lama daripada, Anda tidak perlu melakukan apa pun dengan gerhana lagi.

Untuk Luna dan Mars

Bagian wiki komunitas ini menggabungkan jawaban dari Trismegistos;

1. Sebelum membuat proyek, konfigurasikan parser sintaks Eclipse:

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

di kotak teks berjudul Command to get compiler append append -std=c++14 2. Buat proyek, konfigurasi tergantung pada jenis proyek yang Anda buat:

Untuk proyek yang dibuat sebagai: File -> Baru -> Proyek -> C / C ++ -> Proyek C ++

Klik kanan pada proyek yang dibuat dan buka

Properti -> C / C ++ Build -> Pengaturan -> Pengaturan Alat -> GCC C ++ Compiler -> Dialek

Masukkan -std=c++14ke dalam kotak teks berjudul bendera dialek lain atau pilih ISO C ++ 11 dari drop-down standar Bahasa.

Sekarang ada cara baru untuk menyelesaikan ini tanpa peretasan GXX_EXPERIMENTAL.

Untuk versi terbaru : (Saat ini Juno dan Kepler Luna ):

Di bawah versi Juno yang lebih baru, pengaturannya terletak di Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ().

Versi lama 2012/2013:

  1. Di bawah C / C ++ Build (pada pengaturan proyek), temukan Path Sertakan Preprocessor dan pergi ke Tab Penyedia . Batalkan pilihan semua kecuali Pengaturan Kompilator Dibangun CDT GCC. Kemudian untag Share pengaturan entri…. Tambahkan opsi -std = c ++ 11 ke kotak teks yang disebut Perintah untuk mendapatkan spesifikasi kompiler.

  2. Pergi ke jalur dan simbol. Di bawah Simbol, klik pulihkan default , lalu terapkan.


Catatan:

Eclipse pilih-pilih untuk memukul, Anda harus melakukannya setiap kali Anda meninggalkan tab pengaturan.

[Promosi diri]: Saya menulis instruksi saya sendiri yang lebih rinci berdasarkan hal di atas. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

Terima kasih kepada pengguna Nobodydi https://stackoverflow.com/a/13635080/1149664

Johan Lundberg
sumber
3
Terima kasih tetapi itu tidak membantu saya untuk memecahkan referensi c ++ 11. Program mengkompilasi dengan benar, tetapi gerhana tidak dapat menyelesaikannya. Ketika saya memeriksa "array", #ifndef __GXX_EXPERIMENTAL_CXX0X__mengembalikan true dan kode di bawahnya tidak diuraikan. Ketika saya menambahkan __GXX_EXPERIMENTAL_CXX0X__ke simbol proyek, array akan terselesaikan tetapi referensi proyek saya menjadi kacau. Apa yang mungkin menjadi masalah di sini?
Halil Kaskavalci
1
Saya pikir itu adalah bug. Saya memproduksinya kembali seperti ini: Buka proyek baru. Aktifkan fitur c ++ 11. Tambahkan kelas acak dengan variabel publik. Buat vektor dari kelas acak ini. Dapatkan iterator. Cobalah mengakses variabel publik. Entah ruang kerja saya rusak atau ada bug di Eclipse yang tidak dapat menguraikan ini.
Halil Kaskavalci
1
@HalilKaskavalci Saya menemukan bug yang sama. Jika saya mengatur editor untuk c ++ 11, iterators tidak dapat menyelesaikannya. Jika tidak, std :: unique_ptr tidak dapat menyelesaikan. Benar-benar menjengkelkan, karena saya menggunakan keduanya.
Kian
1
@Kian saya melaporkan bug. bugs.eclipse.org/bugs/show_bug.cgi?id=397027 . Ini sangat menjengkelkan dan saya mulai menggunakan boost library, mereka tidak menghasilkan kesalahan :)
Halil Kaskavalci
1
bekerja untukku! Terima kasih! (melakukannya dengan referensi Anda) Saya telah menambahkan -std = c ++ 11 ke penyedia dan mengembalikan default dalam simbol. Saya pikir mengembalikan default dalam simbol menyelamatkan saya. Sekarang unique_ptr sedang menyelesaikan.
Denis Zaikin
20

Untuk gerhana terbaru (Juno) berikut ini bekerja untuk saya, tidak perlu menyatakan __GXX_EXPERIMENTAL_CXX0X__pada diri saya sendiri. Ini berfungsi untuk pengindeks CDT dan sebagai parameter untuk kompiler:

"nama proyek Anda" -> klik kanan -> properti:

C / C ++ Umum -> Preprocessor Sertakan Jalur, Makro dll. -> beralih ke tab bernama "Penyedia":

  • untuk "Konfigurasi" pilih "Lepaskan" (dan kemudian "debug")

  • matikan semua penyedia dan cukup pilih "Pengaturan Kompiler Bawaan CDT GCC"

  • hapus centang "Bagikan pengaturan entri antara proyek (penyedia global)"

  • di "Perintah untuk mendapatkan spesifikasi kompiler:" tambah "-std = c ++ 11" tanpa tanda kutip (dapat bekerja dengan tanda kutip juga)

  • tekan berlaku dan tutup opsi

  • membangun kembali indeks

Sekarang semua hal terkait c ++ 11 harus diselesaikan dengan benar oleh pengindeks.

win7 x64, gerhana resmi terbaru dengan cdt mingw-w64 gcc 4.7.2 dari proyek mingwbuilds di sourceforge

Andreas
sumber
masih mendapatkan peringatan editor yang salah yang sama, seperti pada Tipe 'std :: utas' tidak dapat diselesaikan meskipun kompilasi dan mengeksekusi OK
Scott Stensland
2
Anda perlu mengkompilasi sekali dengan pengaturan baru, sehingga parser akan "belajar" bahwa bendera std = c ++ 11 diatur
Andreas
tergantung pada versi kompiler, mungkin perlu menambahkan -std = c ++ 0x bukannya -std = c ++ 11 (mis. debian
wheezy
15

Saya memiliki masalah yang sama pada Eclipse Juno saya. Langkah-langkah ini memecahkan masalah:

  • Pergi ke Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols] .
  • Tambahkan simbol: __cplusplus dengan nilai 201103L
Jerome
sumber
2
Ini harus diterima sebagai jawaban karena berfungsi juga untuk proyek Makefile!
omikron
@ Jerk31 ini tidak berfungsi untuk Eclipse Juno berjalan di windows (untuk saya), saya masih melihat kesalahan yang tidak perlu dikeluhkan, meskipun biner bekerja dengan baik. Tolong bantu aku!!!
overexchange
Saya benar-benar minta maaf saya tidak dapat membantu Anda di Windows Saya tidak memiliki kesempatan untuk mencoba menjalankan proyek C ++ pada OS ini. Saya berharap yang terbaik dan semoga berhasil!
Jerome
13

Untuk Eclipse CDT Kepler apa yang berhasil saya singkirkan dari std::threadsimbol yang belum terselesaikan adalah:

  1. Pergi ke Preferences-> C / C ++ -> Build-> Pengaturan

  2. Pilih tab Discovery

  3. Pilih Pengaturan Kompiler Bawaan CDT GCC [Dibagikan]

  4. Tambahkan -std = c ++ 11 ke bidang "Perintah untuk mendapatkan spesifikasi kompiler:" seperti:

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

  1. Ok dan Rebuild Index untuk proyek.

Menambahkan -std=c++11ke proyek Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Flags tidak cukup untuk Kepler, namun itu cukup untuk versi yang lebih lama seperti Helios.

pengguna3348915
sumber
Untuk Versi Eclipse: 2019-09 R. Solusi ini berhasil untuk saya, namun saya telah menghabiskan banyak waktu sebelum itu. Masalahnya ada di Pengaturan Builder: Project -> Properties -> C / C ++ Build: di tab 'Pengaturan Builder' pilih 'Builder internal' untuk 'Tipe Builder'.
grekhss
5

Saya belum bisa berkomentar, jadi saya menulis jawaban saya sendiri:

Ini terkait __GXX_EXPERIMENTAL_CXX0X__dan valid untuk Eclipse Juno dan CDT 8.x.

Beberapa bagian dari jawaban ini sudah tercakup dalam jawaban lain tetapi saya ingin itu koheren.

Untuk membuatnya mungkin menggunakan stdc ++ 11, kita harus menambahkan flag khusus untuk compiler. Anda dapat melakukannya melalui properti proyek. Untuk mengubah properti proyek RMBdan Project propertiesatau ALT + ENTER. Kemudian C / C ++ Build -> Pengaturan -> Pengaturan Alat -> GCC C ++ Compiler -> Miscellaneous -> Flags Lainnya. Masukan -std = c ++ 11 pada akhir baris, untuk GCC itu akan terlihat seperti: -c -fmessage-length=0 -std=c++11. Dengan menambahkan -stdc ++ 11 flag compiler (GCC) akan mendeklarasikan__GXX_EXPERIMENTAL_CXX0X__ dengan sendirinya.

Pada titik ini Anda dapat membangun proyek menggunakan semua kebaikan C ++ 11.

Masalahnya adalah Eclipse memiliki parser sendiri untuk memeriksa kesalahan - itu sebabnya Anda masih mendapatkan semua kesalahan buruk di editor Eclipse, sementara pada saat yang sama Anda dapat membangun dan menjalankan proyek tanpa kesalahan. Ada cara untuk mengatasi masalah ini dengan secara eksplisit mendeklarasikan__GXX_EXPERIMENTAL_CXX0X__ flag untuk proyek, seseorang dapat melakukan itu (seperti yang dikatakan Carsten Greiner): C / C ++ Umum -> Paths and Symbols -> Symbols -> GNU C ++. Klik "Tambah ..." dan lalu __GXX_EXPERIMENTAL_CXX0X__(pastikan untuk menambahkan dan menambahkan dua garis bawah) ke "Nama" dan biarkan "Nilai" kosong. Dan sekarang adalah bagian tambahan yang ingin saya bahas dalam komentar untuk jawaban pertama, pergi ke: C / C ++ Umum -> Preprocessor Sertakan Path Macros dll. -> Penyedia, dan PilihCDT Managed Build Setting Entrieslalu klik BERLAKU dan kembali ke tab Entri, di bawah GNU C ++ seharusnya sekarang ada Entri Pengaturan Pengaturan Terkelola CDT memeriksa apakah di dalamnya ditentukan __GXX_EXPERIMENTAL_CXX0X__apakah itu -> BERLAKU dan membangun kembali indeks Anda harusnya baik-baik saja pada saat ini.

ravwojdyla
sumber
3

Saya juga mengalami beberapa masalah (Ubuntu 13.04 64-bit, g ++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Banyak hal yang disebutkan di atas, maaf untuk mengulanginya, tetapi juga saya kesulitan menggunakannya

std::thread

sebagai bagian dari c ++ 11 (menambahkan -pthread untuk linker menyelesaikan masalah itu). Bagaimanapun, akhirnya pengaturan ini bekerja dengan baik:

Project -> Properties -> C / C ++ Build -> Settings -> Miscellaneous. Tambahkan

-std=c++11

bendera untuk kompiler GCC dan G ++. Klik Terapkan.

Untuk tautan, jendela yang sama, Miscellaneous, bendera Linker, menambahkan

-pthread

bendera. Pengaturan perpustakaan bersama, nama objek bersama, tambahkan

-Wl,--no-as-needed

panji juga. Klik Terapkan.

C / C ++ Umum -> Jalur dan simbol -> Simbol TAB, GNU C ++ dipilih, Tambahkan

__GXX_EXPERIMENTAL_CXX0X__

(Tidak bernilai)

bendera. Klik Terapkan.

C / C ++ Umum -> Preprocessor Sertakan jalur .. -> Tab Penyedia: centang

Pengaturan Kompiler bawaan CDT GCC

dan untuk "Perintah untuk mendapatkan spesifikasi kompiler", tambahkan

-std=c++11

bendera. Hapus centang Bagikan. Klik Terapkan.

Entri Pengaturan Pembuatan Managemen CDT, periksa ini juga. Hapus centang dua lainnya. Klik Terapkan.

Kembali ke tab Entri, GNU C ++ CDT Managments Entri Pengaturan Pembuatan, sekarang Anda akan melihat ditambahkan

__GXX_EXPERIMENTAL_CXX0X__

masuk.

Itu dia. Saat coding, mengetik

std::

sekarang dapat menyelesaikan secara otomatis kelas utas misalnya, build seharusnya berfungsi dengan baik dan seharusnya tidak ada

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

saat runtime.

Ola Aronsson
sumber
Itu adalah Project -> Properties -> C/C++ Build -> Settings -> Miscellaneouslangkah yang berhasil bagi saya. Terima kasih banyak: D
Jake88
2

Saya tidak tahu apakah hanya saya, solusi peringkat tertinggi tidak berfungsi untuk saya, versi gerhana saya hanya platform gerhana normal yang diinstal dengan menggunakan sudo apt-get install gerhana di Ubuntu. Tetapi saya menemukan solusi yang mengadopsi metode bersama baik dari solusi berperingkat tertinggi dan yang kedua, apa yang saya lakukan untuk membuatnya bekerja dijelaskan sebagai berikut (Perhatikan bahwa langkah-langkah lain seperti membuat proyek C ++ dll diabaikan untuk kesederhanaan)

Setelah Anda membuat proyek C ++

(1) C / C ++ Umum -> Jalur dan Simbol -> Simbol -> GNU C ++. Klik "Tambah ..." dan rekatkan GXX_EXPERIMENTAL_CXX0X (pastikan untuk menambahkan dan menambahkan dua garis bawah) ke "Nama" dan biarkan "Nilai" kosong.

(2) Di bawah C / C ++ Build (pada pengaturan proyek), temukan Path Sertakan Preprosesor dan buka Tab Penyedia. Batalkan pilihan semua kecuali Pengaturan Kompilator Dibangun CDT GCC. Kemudian untag Share pengaturan entri…. Tambahkan opsi -std = c ++ 11 ke kotak teks yang disebut Perintah untuk mendapatkan spesifikasi kompiler

Setelah melakukan langkah-langkah di atas 2 dan 2 saja, itu berhasil, gerhana dapat menyelesaikan unique_ptr, saya tidak tahu mengapa solusi ini bekerja, berharap dapat membantu orang.

doody1986
sumber
Ini juga bekerja untuk saya (gerhana neon). Pada awalnya saya tidak membatalkan pilihan penyedia lain, yang masih menyebabkan masalah, tetapi membatalkan pilihan semua penyedia selain "Pengaturan Kompilator bawaan CDT GCC" dan "Pengaturan Pengguna CDT" berfungsi. Terima kasih!
zpon
2

Eclipse C / C ++ tidak mengenali simbol std::unique_ptrmeskipun Anda telah menyertakan header memori C ++ 11 dalam file Anda.

Dengan asumsi Anda menggunakan kompiler GNU C ++, inilah yang saya lakukan untuk memperbaikinya:

Project -> Properties -> C / C ++ Umum -> Preprocessor Include Paths -> GNU C ++ -> Entri Pengaturan Pengguna CDT

  1. Klik pada tombol "Tambah ..."

  2. Pilih "Preprocessor Macro" dari menu dropdown

    Name: __cplusplus     Value:  201103L
  3. Tekan Apply, dan kemudian OK untuk kembali ke proyek Anda

  4. Kemudian bangun kembali indeks C ++ Anda: Proyek -> C / C ++ Indeks -> Rebuild

Rubens Gomes
sumber
Ini adalah satu-satunya metode yang bekerja untuk saya di Eclipse 2018-12. Jawaban "diterima", dll., Tidak lagi berfungsi pada 2018-12.
David Steinhauer
1

Bagi saya di Eclipse Neon saya mengikuti jawaban Trismegistos di atas , BELUM saya juga menambahkan langkah tambahan:

  • Pergi ke proyek -> Properti -> C ++ Umum -> Preprosesor Sertakan jalur, Makro dll. -> Penyedia -> CDT Cross GCC Pengaturan Kompilator Internal, tambahkan bendera "-std = c ++ 11"

Tekan berlaku dan OK.

Bersulang,

Orang.

Guy Avraham
sumber
0
  • klik kanan proyek dan pergi ke "Properties"
  • C / C ++ Build -> Pengaturan -> Pengaturan Alat -> GCC C ++ Compiler -> Miscellaneous -> Flags Lainnya. Letakkan -lm di ujung kotak teks bendera lainnya dan OK.
Sameera Chanaka
sumber
Eclipse versi apa ini?
Braiam
0

Baik hack maupun versi cleaner tidak berfungsi untuk Indigo. Peretasan diabaikan, dan opsi konfigurasi yang diperlukan tidak ada. Tanpa alasan yang jelas, build mulai bekerja setelah tidak bekerja dan tidak memberikan alasan yang bermanfaat mengapa. Setidaknya dari baris perintah, saya mendapatkan hasil yang dapat direproduksi.

Jerry Miller
sumber
0

Untuk mendapatkan dukungan untuk C ++ 14 di Eclipse Luna, Anda bisa melakukan langkah-langkah ini:

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

Reindex proyek Anda dan akhirnya restart Eclipse. Itu harus bekerja seperti yang diharapkan.

Jerome
sumber
0

Saya menyelesaikannya dengan cara ini pada Mac. Saya menggunakan Homebrew untuk menginstal versi terbaru gcc / g ++. Mereka mendarat di / usr / local / bin dengan menyertakan di / usr / local / termasuk.

Saya CD ke / usr / local / bin dan membuat symlink dari g ++ @ 7 apapun menjadi g ++ menyebabkan @ bit itu mengganggu.

Lalu saya pergi ke MyProject -> Properties -> C / C ++ Build -> Settings -> GCC C ++ Compiler dan mengubah perintah dari "g ++" menjadi "/ usr / local / bin / g ++". Jika Anda memutuskan untuk tidak membuat tautan simbolik, Anda bisa lebih spesifik.

Lakukan hal yang sama untuk penghubung.

Terapkan dan Terapkan dan Tutup. Biarkan itu membangun kembali indeks. Untuk sementara, itu menunjukkan sejumlah kesalahan yang menakutkan, tapi saya pikir itu sementara membangun indeks. Sementara saya mencari tahu kesalahannya, semuanya menghilang tanpa tindakan lebih lanjut.


Saya pikir tanpa memverifikasi bahwa Anda juga bisa masuk ke Eclipse -> Properties -> C / C ++ -> Core Build Toolchains dan mengeditnya dengan jalur yang berbeda, tapi saya tidak yakin apa yang akan dilakukan.

Joseph Larson
sumber
0

Saya memiliki masalah yang sama menggunakan Eclipse C ++ 2019-03 untuk proyek campuran C dan C ++ yang menggunakan std :: opsional dan std :: swap. Apa yang berhasil untuk saya adalah ini. Dalam proyek Properties-> C / C ++ Build-> Settings-> Tool Settings-> Cross G ++ Compiler, hapus -std = gnu ++ 17 dari Miscellaneous dan letakkan di Dialect-> Other Dialect Flags.

dc42
sumber
0

Saat menggunakan kompiler silang, saya sering mendapatkan sistem build custom canggih yang dibuat dengan cermat oleh rekan kerja. Saya menggunakan "Proyek Makefile dengan kode yang ada" sehingga sebagian besar jawaban lain tidak berlaku.

Pada awal proyek, saya harus menentukan bahwa saya menggunakan kompiler silang dalam panduan untuk "Proyek Makefile dengan Kode yang Ada". Yang mengganggu adalah bahwa dalam 10 tahun terakhir, tombol kompiler silang pada wizard itu tidak menanyakan di mana kompiler silang berada. Jadi dalam langkah yang memperbaiki masalah C ++ dan masalah cross compiler, saya harus pergi ke tab provider seperti yang disebutkan oleh jawaban seperti @ravwojdyla di atas, tetapi penyedia yang harus saya pilih adalah penyedia cross-compiler. Kemudian di kotak perintah saya meletakkan path lengkap ke kompiler dan saya menambahkan -std = gnu ++ 11 untuk standar C ++ yang saya ingin memiliki dukungan untuk. Ini berhasil dan bisa diharapkan.

Anda dapat melakukan ini pada proyek yang ada. Satu-satunya hal yang perlu Anda lakukan adalah menjalankan kembali pengindeks.

Saya tidak pernah menambahkan flag eksperimental atau menimpa definisi __cplusplus. Satu-satunya hal adalah, jika saya memiliki sejumlah besar kode C modern, saya tidak punya tempat untuk menempatkan opsi standar khusus-C.

Dan ketika semuanya berjalan sangat buruk, mendapatkan parser log, menggunakan perintah itu di submenu Indexer, bisa sangat informatif.

pria ruang cardiff
sumber