Eclipse CDT'de C ++ 11 / C ++ 0x desteği nasıl etkinleştirilir?


210

Tutulma 3.7.1 CDT 1.4.1 GCC 4.6.2

Bu bir C ++ 11 kodu parçası örneğidir:

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

Eclipse editörü şikayet ediyor:

Function 'unique_ptr' could not be resolved

Makefile derlemesi iyi çalışıyor. Eclipse'in bu tür hatalardan şikayet etmesini nasıl durdurabilirim?


12
En azından, olmalıstd::unique_ptr<char[]>
Cubbi

Bunun doğru olduğundan emin değilim - char [] char * 'ya dönüştürülebilir ve unique_ptr <char> char * gibi bir char'a işaretçi olur
Nick

1
Olmaz unique_ptr<char>diyoruz deleteo ile oluşturulduğundan beri yanlış olan new[]?
Dietrich Epp

6
@Nick: Hayır, haklı. Yazma şekliniz delete, ihtiyaç duyduğunuzda delete[] çağrılmaya neden olur . unique_ptr<char>Onunla silinir bir işaretçi, gidiyor varsayar delete. unique_ptr<char[]>ile delete[]doğru şekilde silinecek bir dizi bekler .
Nicol Bolas

Yanıtlar:


224

Eclipse forumunda bu makaleyi buldum , sadece bu adımları takip ettim ve benim için çalışıyor. Cygwin kurulumuyla Windows'ta Eclipse Indigo 20110615-0604 kullanıyorum.

  • Yeni bir C ++ projesi yapın
  • Her şey için varsayılan seçenekler
  • Oluşturulduktan sonra, projeyi sağ tıklayın ve "Özellikler" e gidin
  • C / C ++ Derlemesi -> Ayarlar -> Araç Ayarları -> GCC C ++ Derleyicisi -> Çeşitli -> Diğer Bayraklar. Koy -std=c++0x(ya da daha yeni derleyici sürümü -std=c++11için. ... GCC C ++ Derleyicisi yerine Cygwin derleyicim de var
  • C / C ++ Genel -> Yollar ve Semboller -> Semboller -> GNU C ++. "Ekle ..." yi tıklayın ve __GXX_EXPERIMENTAL_CXX0X__"Ad" içine yapıştırın (iki alt çizgi eklediğinizden emin olun) ve "Değer" i boş bırakın.
  • Uygula'ya basın, ne yapmanızı isterse yapın, ardından Tamam'a basın.

Eclipse SSS'de de bunun bir açıklaması var: Eclipse FAQ / C ++ 11 Özellikler .

Eclipse görüntü ayarı


2
Yey, işe yaradı! Ancak, GXX_EXPERIMENTAL_CXX0X'e iki alt çizgi eklediğinizden ve eklediğinizden emin olun - Bu arada kabul edeceğim
Nick

5
Bu, sahte editör hatalarını kaldırdı mı? Derleme ile ilgili hiçbir sorunum yok ve yeni std türleri tanınıyor, ancak döngüler ve rvalue referansları için aralık için editör sözdizimi hatalarından kurtulamıyorum &&.
juanchopanza

7
Doğal takip sorusu şimdi: Bu özel C ++ Proje Ayarlarını yeni bir Eclipse Project şablonuna "C ++ 11 Project" diyerek kaydederek iş akışımızı optimize edebilir miyiz?
Nordlöw

38
Not: Juno için cevap arayan herkes için bu işe yaramaz .
Christopher

4
Kepler / juno için çözüm bu cevapta bulunur . Aşağıdaki makalede Johan Lundberg'in cevabına yazılmıştır, ancak kabul edilen cevabı daha eksiksiz hale getirmek için burada da not ediyorum.
Inusable Lumière

150

Eclipse CDT 4.4 Luna ve 4.5 Mars Talimatı

İlk olarak, proje oluşturmadan önce Eclipse sözdizimi ayrıştırıcısını yapılandırın:

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

Command to get compiler specsekleme başlıklı metin kutusunda-std=c++11

Artık proje oluşturabilirsiniz, yapılandırma ne tür bir proje oluşturduğunuza bağlıdır:

Şu şekilde oluşturulan proje için: Dosya -> Yeni -> Proje -> C / C ++ -> C ++ Projesi

Oluşturulan projeye sağ tıklayın ve açın

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

Put -std=c++11başlıklı metin kutusuna other dialect flagsveya seçmek ISO C++11dan Language standarddamla aşağı.

CMake projesi için

Tutulma proje dosyaları oluşturma (projenizin içinde)

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

Daha sonra standart tutulma projesi olarak tutulmaya oluşturulan dizini içe aktarın. Projeyi sağ tıklayın ve açın

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

etkinleştirin CDT GCC Build-in Compiler Settingsve daha yüksek bir değere taşıyın Contributed PathEntry Containers(Bu önemlidir)

Son Ortak Adım

yeniden derleyin, yeniden oluşturun Project-> C/C++ Indexve Eclipse'i yeniden başlatın.


1
Tutulma yeniden başlatmaya gerek kalmadan mükemmel çalıştı. Teşekkür ederim.
prasannak

Teşekkür ederim. Luna'da benim için başka bir cevap işe yaramadı.
Mohamed El-Nakib

Mars'ta hala çalışıyor. Harika cevaptan daha fazlası! Bu cevabı sadece iki kez oylayabilseydim!
Mohamed El-Nakib

Teşekkürler! Bu karşılaştığım sorun için en yararlı cevap (4.5)
AturSams

2
Eclipse Neon.3 için, bir C ++ Makefile projesi ile eklenecek proje ayarı -std=c++11oldu Project Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:. Buna ekleyin -std=c++11. Global çalışma alanı ayarlarında önerdiğim gibi ayarladım, ancak yeni bir Makefileproje oluşturduğumda yukarıda tarif ettiğim konuma kopyalanmadı .
BeeOnRope

112

Güncelleme 2016:

İtibariyle gcc 6 ( değişiklik ), varsayılan C ++ ağız C ++ 14'tür. Bu, açıkça daha yeni veya daha eski bir lehçeye ihtiyacınız olmadığı sürece, artık tutulma ile hiçbir şey yapmanız gerekmediği anlamına gelir.

Luna ve Mars için

Bu topluluk wiki bölümü Trismegistos'un cevabını içerir;

1. Proje oluşturmadan önce Eclipse sözdizimi ayrıştırıcısını yapılandırın:

Pencere -> Tercihler -> C / C ++ -> Derleme -> Ayarlar -> Keşif -> CDT GCC Yerleşik Derleyici Ayarları

Derleyici özelliklerini almak için komut başlıklı metin kutusuna ekleyin. -std=c++14 2. Proje oluşturun, yapılandırma ne tür bir proje yarattığınıza bağlıdır:

Şu şekilde oluşturulan proje için: Dosya -> Yeni -> Proje -> C / C ++ -> C ++ Projesi

Oluşturulan projeye sağ tıklayın ve açın

Özellikler -> C / C ++ Derleme -> Ayarlar -> Araç Ayarları -> GCC C ++ Derleyici -> Lehçe

-std=c++14Diğer lehçe bayrakları başlıklı metin kutusuna koyun veya Dil standardı açılır menüsünden ISO C ++ 11'i seçin.

Şimdi bunu GXX_EXPERIMENTAL kesmeksizin çözmenin yeni bir yolu var.

En son sürümler için : (Şu anda Juno ve Kepler Luna ):

Juno'nun daha yeni sürümleri altında ayarlar Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ().

Eski versiyonlar 2012/2013:

  1. C / C ++ Derlemesi altında (proje ayarlarında) Önişlemci Dahil Etme Yolunu bulun ve Sağlayıcılar Sekmesine gidin . CDT GCC Yerleşik Derleyici Ayarları dışındaki tüm öğelerin seçimini kaldırın. Ardından Paylaşım ayarları girişlerinin etiketini kaldırın…. Derleyici özelliklerini almak için Command adlı metin kutusuna -std = c ++ 11 seçeneğini ekleyin .

  2. Yollara ve simgelere gidin. Semboller altında, varsayılanları geri yükle'yi tıklatın ve ardından uygulayın.


Notlar:

Eclipse uygula vurma konusunda seçici, bir ayarlar sekmesinden her ayrıldığınızda bunu yapmanız gerekir.

[Kendini tanıma]: Yukarıdakilere dayanarak daha ayrıntılı talimatlarmı yazdım. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

Kullanıcıya sayesinde Nobodyde https://stackoverflow.com/a/13635080/1149664


3
Teşekkür ederim ama c ++ 11 referanslarını çözmeme yardımcı olmadı. Program doğru şekilde derleniyor, ancak tutulma bunları çözemiyor. "Dizi" seçeneğini işaretlediğimde, #ifndef __GXX_EXPERIMENTAL_CXX0X__true değerini döndürür ve altındaki kod ayrıştırılmaz. __GXX_EXPERIMENTAL_CXX0X__Proje sembollerine eklediğimde , dizi çözülür ancak projemin referansları bozulur. Burada sorun ne olabilir?
Halil Kaskavalci

1
Bence bu bir hata. Bu şekilde yeniden ürettim: Yeni bir proje açın. C ++ 11 özelliklerini etkinleştirin. Genel değişkenli rastgele bir sınıf ekleyin. Bu rastgele sınıfın vektörünü oluşturun. Yineleyiciyi al. Genel değişkene erişmeyi deneyin. Ya benim çalışma alanım bozuk ya da Eclipse'de bunu ayrıştıramayan bir hata var.
Halil Kaskavalci

1
@HalilKaskavalci Aynı hatayı buldum. Düzenleyiciyi c ++ 11 için ayarlarsam yineleyiciler çözülemez. Eğer yapmazsam, std :: unique_ptr çözülemez. Her ikisini de kullandığım için gerçekten sinir bozucu.
Kian

1
@Kian Hatayı rapor ettim. bugs.eclipse.org/bugs/show_bug.cgi?id=397027 . Oldukça sinir bozucu ve destek kütüphanelerini kullanmaya başladım, hatayı üretmiyorlar :)
Halil Kaskavalci

1
benim için çalışıyor! Teşekkür ederim! (referans ile yaptı) Ben sağlayıcılara -std = c ++ 11 ekledim ve sembollerde varsayılanları geri yükledim. Sanırım sembollerde varsayılanı geri yüklemek beni kurtarıyor. Şimdi unique_ptr çözülüyor.
Denis Zaikin

20

En son (Juno) eclipse cdt için aşağıdakiler benim için çalıştı __GXX_EXPERIMENTAL_CXX0X__, kendimi beyan etmeye gerek yok . Bu, CDT dizinleyici için ve derleyici için parametre olarak çalışır:

"proje adınız" -> sağ tıklayın -> özellikler:

C / C ++ Genel -> Önişlemci Yolları, Makroları vb. Ekle -> "Sağlayıcılar" adlı sekmeye geçin:

  • "Yapılandırma" için "Serbest Bırak" ı seçin (ve daha sonra "hata ayıklama")

  • tüm sağlayıcıları kapatın ve "CDT GCC Yerleşik Derleyici Ayarları" nı seçin

  • "Ayar girişlerini projeler arasında paylaş (global sağlayıcı)" seçeneğinin işaretini kaldırın

  • "derleyici özellikleri alma komutu:" tırnak işaretleri olmadan "-std = c ++ 11" ekleyin (tırnak işaretleri ile de çalışabilir)

  • uygula'ya basın ve seçenekleri kapatın

  • dizini yeniden oluştur

Şimdi c ++ 11 ile ilgili tüm şeyler indeksleyici tarafından doğru bir şekilde çözülmelidir.

win7 x64, mingwbuilds projesinden cdt mingw- w64 gcc 4.7.2 ile en son resmi tutulma


hala aynı hatalı editör uyarıları alıyorum, çünkü 'std :: thread' türünde olduğu gibi tamamlanamasa ve çalıştırsa bile çözülemedi
Scott Stensland

2
u yeni ayarlarla bir kez derlemek gerekir, böylece ayrıştırıcı "öğrenecek" std = c ++ 11 bayrağı ayarlanır
Andreas

gerekli olabilir derleyici versiyonuna bağlı olarak eklemek için -std = C ++ 0 x yerine -std = C ++ 11 (örneğin debian hışıltılı) arasında
xmoex

15

Aynı problem Eclipse Juno'mda da vardı. Bu adımlar sorunu çözdü:

  • Adresine git Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols] .
  • Simge ekle: __cplusplus değeri ile 201103L

2
Makefile projeleri için de geçerli olduğu için bu cevap kabul edilmelidir!
omikron

@ Jerk31 bu Eclipse Juno (benim için) üzerinde çalışan windows için çalışmıyor, hala iyi çalışıyor rağmen bu gereksiz hatalar, şikayet görüyorum. Lütfen bana yardım et!!!
Ocak'ta

Windows'da size yardımcı olamadığım için gerçekten üzgünüm. Bu işletim sisteminde herhangi bir C ++ projesi yürütme fırsatım yok. Size en iyi ve iyi şanslar diliyorum!
Jerome

13

Eclipse CDT Kepler için std::threadçözülmemiş sembolden kurtulmak için benim için çalışan şey:

  1. Tercihler-> C / C ++ -> Derleme-> Ayarlar'a gidin

  2. Keşif sekmesini seçin

  3. CDT GCC Yerleşik Derleyici Ayarlarını Seçin [Paylaşılan]

  4. -Std = c ++ 11 gibi "derleyici özellikleri almak için komut" alanına ekleyin:

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

  1. Tamam ve proje için İndeksi Yeniden Oluştur.

Flags -std=c++11projesine eklemek Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->OtherKepler için yeterli değildi, ancak Helios gibi eski sürümler için yeterliydi.


Eclipse Sürümü için: 2019-09 R. Bu çözüm benim için çalıştı, ancak bundan önce çok zaman geçirdim. Sorun, Oluşturucu Ayarları: Proje -> Özellikler -> C / C ++ Oluştur: 'Oluşturucu Ayarları' sekmesinde 'Oluşturucu türü' için 'Dahili oluşturucu'yu seçin.
grekhss

5

Henüz yorum yapamam, bu yüzden kendi cevabımı yazıyorum:

İle ilgili __GXX_EXPERIMENTAL_CXX0X__ ve Eclipse Juno ve CDT 8.x için geçerli olduğundan

Bu cevabın bazı kısımları zaten diğer cevaplarda kapsanıyor ama tutarlı olmasını istiyorum.

Stdc ++ 11 kullanarak inşa etmeyi mümkün kılmak için, derleyici için belirli bir bayrak eklemeniz gerekir. Bunu proje özellikleri aracılığıyla yapabilirsiniz. Proje özelliklerini değiştirmek RMBve Project propertiesve ALT + ENTER. Sonra C / C ++ Build -> Ayarlar -> Araç Ayarları -> GCC C ++ Derleyici -> Diğer -> Diğer Bayraklar. O gibi bir şey olacaktır GCC için, satırın sonunda -std = c ++ 11 koyun: -c -fmessage-length=0 -std=c++11. -Stdc ++ 11 bayrak derleyicisi (GCC) ekleyerek bildirir__GXX_EXPERIMENTAL_CXX0X__ kendi başına .

Bu noktada, C ++ 11'in tüm iyiliğini kullanarak proje oluşturabilirsiniz.

Sorun şu ki, Eclipse'nin hataları kontrol etmek için kendi ayrıştırıcısı var - bu yüzden hala Eclipse editöründe tüm kötü hataları alıyorsanız, aynı zamanda herhangi bir proje oluşturup çalıştırabilirsiniz. Bu sorunu __GXX_EXPERIMENTAL_CXX0X__proje için açıkça bayrak ilan ederek çözmenin bir yolu var , biri bunu yapabilir (Carsten Greiner'ın dediği gibi): C / C ++ Genel -> Yollar ve Semboller -> Semboller -> GNU C ++. __GXX_EXPERIMENTAL_CXX0X__"Ad ..." ve "Ekle" yi tıklayın ve geçmişe geçin (iki alt çizgi eklediğinizden emin olun) "Değer" i boş bırakın. Ve şimdi ilk cevaba yorumda ele almak istediğim ekstra bölüm, C / C ++ Genel -> Önişlemci Yol Makrolarını Dahil Et vb. -> Sağlayıcılar ve SeçCDT Managed Build Setting Entriesdaha sonra UYGULA'ya tıklayın ve Girişler sekmesine geri dönün, GNU C ++ altında artık CDT Yönetilen Derleme Ayarı Girişleri bulunmalıdır. İçinde __GXX_EXPERIMENTAL_CXX0X__-> UYGULA ve yeniden oluştur dizini olup olmadığını kontrol edin .


3

Ben de birkaç sorun vardı (Ubuntu 13.04 64-bit, g ++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Yukarıda bir çok şeyden bahsedildi, bunları tekrarladığım için üzgünüm, ancak ek olarak

std::thread

c ++ 11'in bir parçası olarak (linker için -pthread ekleyerek bu sorunu çözer). Her neyse, nihayet bu ayarlar iyi çalıştı:

Proje -> Özellikler -> C / C ++ Derleme -> Ayarlar -> Çeşitli. Ekle

-std=c++11

GCC ve G ++ derleyicileri için işaret. Uygula'yı tıklayın.

Bağlayıcı için aynı pencere, Çeşitli, Bağlayıcı bayrakları,

-pthread

bayrağı. Paylaşılan kitaplık ayarları, Paylaşılan nesne adı,

-Wl,--no-as-needed

bayrak da. Uygula'yı tıklayın.

C / C ++ Genel -> Yollar ve semboller -> Semboller SEKMESİ, GNU C ++ seçili,

__GXX_EXPERIMENTAL_CXX0X__

(değersiz)

bayrağı. Uygula'yı tıklayın.

C / C ++ Genel -> Önişlemci Yolları ekle .. -> Sağlayıcılar sekmesi: kontrol et

CDT GCC Yerleşik Derleyici Ayarları

ve "derleyici özelliklerini alma komutu" için,

-std=c++11

bayrağı. Paylaş'ın işaretini kaldırın. Uygula'yı tıklayın.

CDT Mangages Build Setting Entries, bunu da kontrol edin. Diğer ikisinin işaretini kaldırın. Uygula'yı tıklayın.

Girişler sekmesine geri dönersek, GNU C ++ CDT Managages Build Ayar Girişleri, artık

__GXX_EXPERIMENTAL_CXX0X__

girişi.

Bu kadar. Kod yazarken, yazarken

std::

şimdi thread sınıfını otomatik olarak tamamlayabilir, derlemeler iyi çalışmalı ve

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

işlem esnasında.


Benim için çalışan Project -> Properties -> C/C++ Build -> Settings -> Miscellaneousadım buydu. Bir demet teşekkür: D
Jake88

2

Sadece ben olup olmadığını bilmiyorum, en üst sıradaki çözüm benim için işe yaramıyor, benim tutulma sürümüm sadece Ubuntu'da sudo apt-get install eclipse kullanılarak yüklenen normal tutulması platformu ama birlikte yöntemi benimseyen bir çözüm buldum hem en üst sıradaki çözümden hem de ikincisinden, çalışmasını sağlamak için yaptığım şey aşağıda açıklanmıştır (C ++ projesi oluşturma gibi diğer adımların basitlik için yok sayıldığını unutmayın)

C ++ projesini oluşturduktan sonra

(1) C / C ++ Genel -> Yollar ve Semboller -> Semboller -> GNU C ++. "Ekle ..." yi tıklayın ve GXX_EXPERIMENTAL_CXX0X'i (iki alt çizgi eklediğinizden ve başına eklediğinizden emin olun) "Ad" a yapıştırın ve "Değer" i boş bırakın.

(2) C / C ++ Derlemesi altında (proje ayarlarında) Önişlemci Dahil Etme Yolunu bulun ve Sağlayıcılar Sekmesine gidin. CDT GCC Yerleşik Derleyici Ayarları dışındaki tüm öğelerin seçimini kaldırın. Ardından Paylaşım ayarları girişlerinin etiketini kaldırın…. Derleyici özelliklerini almak için Command adlı metin kutusuna -std = c ++ 11 seçeneğini ekleyin

Sadece 2 ve 2 adım yukarıda gerçekleştirildikten sonra, işe yarıyor, eclipse unique_ptr çözmek mümkün, bu çözüm neden işe yaradığını bilmiyorum, umarım insanlara yardımcı olabilir.


Bu da benim için çalıştı (tutulma neon). İlk başta hala sorun yaratan diğer sağlayıcıların seçimini kaldırmadım, ancak "CDT GCC Yerleşik Derleyici Ayarları" ve "CDT Kullanıcı Ayarları" dışındaki diğer tüm sağlayıcıların seçimini kaldırdım. Teşekkürler!
zpon

2

Eclipse C / C ++, std::unique_ptrdosyanıza C ++ 11 bellek başlığını eklemiş olmanıza rağmen sembolü tanımıyor .

GNU C ++ derleyicisini kullandığınızı varsayarsak, bunu düzeltmek için yaptım:

Proje -> Özellikler -> C / C ++ Genel -> Önişlemci Yolları İçer -> GNU C ++ -> CDT Kullanıcı Ayarı Girişleri

  1. "Ekle ..." düğmesini tıklayın

  2. Açılır menüden "Önişlemci Makrosu" nu seçin

    Name: __cplusplus     Value:  201103L
  3. Uygula'ya ve ardından projenize geri dönmek için Tamam'a basın

  4. Sonra C ++ endeksi yeniden oluşturun: Projeler -> C / C ++ Endeksi -> Yeniden oluştur


Eclipse 2018-12'de benim için çalışan tek yöntem bu. "Kabul edilen" cevap vb. Artık 2018-12 yıllarında çalışmıyor.
David Steinhauer

1

Benim için üzerine Eclipse Neon I izledi Trismegistos yukarıdaki burada cevap , HENÜZ ben de ek bir adım ekledi:

  • Projeye gidin -> Özellikler -> C ++ Genel -> Önişlemci Yolları, Makroları vb. Ekle -> Sağlayıcılar -> CDT Cross GCC Yerleşik Derleyici Ayarları, "-std = c ++ 11" bayrağını ekleyin

Uygula ve Tamam'a basın.

Alkış,

İnsan.


0
  • projeyi sağ tıklayın ve "Özellikler" e gidin
  • C / C ++ Derlemesi -> Ayarlar -> Araç Ayarları -> GCC C ++ Derleyicisi -> Çeşitli -> Diğer Bayraklar. Diğer bayraklar metin kutusunun sonuna -lm ve OK koyun.

Eclipse'nin hangi sürümü bu?
Braiam

0

Ne kesmek ne de temiz sürüm Indigo için işe yaramıyor. Saldırı yoksayılır ve gerekli yapılandırma seçenekleri eksik. Belirgin bir sebep olmadan, yapı çalışmadığı ve neden faydalı bir neden sağlamadığı zaman çalışmaya başladı. En azından komut satırından tekrarlanabilir sonuçlar elde ediyorum.


0

Eclipse Luna'da C ++ 14 desteği almak için şu adımları uygulayabilirsiniz:

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

Projenizi yeniden endeksleyin ve sonunda Eclipse'i yeniden başlatın. Beklendiği gibi çalışmalıdır.


0

Mac'te bu şekilde çözdüm. Homebrew'u gcc / g ++ 'nın en son sürümünü kurmak için kullandım. / Usr / local / include içindeki / usr / local / bin dizinine inerler.

Ben / usr / local / bin içine CD'd ve g ++ @ 7'den bir symlink yaptım.

Sonra MyProject -> Özellikler -> C / C ++ Build -> Ayarlar -> GCC C ++ Derleyicisi'ne gittim ve komutu "g ++" yerine "/ usr / local / bin / g ++" olarak değiştirdim. Sembolik bağlantı kurmamaya karar verirseniz, daha spesifik olabilirsiniz.

Bağlayıcı için de aynı şeyi yapın.

Uygula ve Uygula ve Kapat. Dizini yeniden oluşturmasına izin verin. Bir süre, göz korkutucu sayıda hata gösterdi, ancak bence bu indeksler oluştururken oldu. Ben hataları çözerken, hepsi başka bir işlem yapmadan ortadan kayboldu.


Eclipse -> Özellikler -> C / C ++ -> Core Build Toolchains'e gidebileceğinizi ve farklı yollara sahip olanları düzenleyebileceğinizi doğrulamadan düşünüyorum, ancak bunun ne yapacağından emin değilim.


0

Eclipse C ++ 2019-03 std :: isteğe bağlı ve std :: swap kullanılan karışık C ve C ++ projesi için kullanarak benzer bir sorun vardı. Benim için işe yarayan buydu. Projede Özellikler-> C / C ++ Build-> Ayarlar-> Araç Ayarları-> Cross G ++ Derleyici, -std = gnu ++ 17'yi Miscellaneous'tan kaldırın ve bunun yerine Dialect-> Other Dialect Flags yerine koyun.


0

Bir çapraz derleyici kullanırken, genellikle meslektaşlar tarafından özenle hazırlanmış gelişmiş özel yapım sistemleri alırım. "Mevcut kod ile Makefile Projesi" kullanıyorum, bu yüzden diğer cevapların çoğu geçerli değildir.

Projenin başında, sihirbazda "Mevcut Kodla Makefile Projesi" için bir çapraz derleyici kullandığımı belirtmeliyim. Sinir bozucu şey, son 10 yıl içinde, sihirbazdaki çapraz derleyici düğmesinin çapraz derleyicinin nerede olduğunu sormamasıdır. Bu yüzden C ++ problemini ve çapraz derleyici problemini gideren bir adımda, yukarıdaki @ravwojdyla gibi cevapların belirttiği gibi sağlayıcılar sekmesine gitmeliyim, ancak seçmem gereken sağlayıcı çapraz derleyici sağlayıcısı. Sonra komut kutusuna derleyiciye tam yol koymak ve ben destek istiyorum C ++ standart için -std = gnu ++ 11 ekleyin. Bu beklendiği gibi çalışıyor.

Bunu mevcut bir projeye yapabilirsiniz. Yapmanız gerekebilecek tek şey dizinleyiciyi yeniden çalıştırmaktır.

Deneysel bayrağı eklemek veya __cplusplus'un tanımını geçersiz kılmak zorunda kalmadım. Tek şey, eğer önemli miktarda modern C kodum varsa, C'ye özgü standart seçeneği koymak için hiçbir yerim yok.

Ve işler gerçekten kötü gittiğinde, bir ayrıştırıcı günlüğü almak, Indexer alt menüsünde bu komutu kullanarak, çok bilgilendirici olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.