web-dev-qa-db-ja.com

Eclipse CDTでC ++ 11 / C ++ 0xサポートを有効にするにはどうすればいいですか?

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

これは、C++ 11コードの一例です。

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

Eclipseエディタは次のように文句を言う。

Function 'unique_ptr' could not be resolved

Makefileのコンパイルはうまくいきます。 Eclipseに、この種のエラーについての苦情を止めさせるにはどうすればよいですか?

208
Nick

私はEclipseフォーラムで this という記事を見つけました。それらのステップに従っただけで、それは私のために働きます。私はWindows上でCygwinの設定でEclipse Indigo 20110615-0604を使用しています。

  • 新しいC++プロジェクトを作る
  • すべてのデフォルトオプション
  • 作成したら、プロジェクトを右クリックして[プロパティ]に移動します。
  • C/C++ビルド - >設定 - >ツール設定 - > GCC C++コンパイラ - >その他 - >その他のフラグ。 GCC C++コンパイラの代わりに-std=c++0x(または新しいコンパイラバージョン-std=c++11を最後に入れてください。Cygwinコンパイラもあります。
  • C/C++全般 - >パスと記号 - >記号 - > GNU C++。 [追加...]をクリックし、[名前]に__GXX_EXPERIMENTAL_CXX0X__(必ず2つのアンダースコアを追加して追加)を貼り付け、[値]を空白のままにします。
  • [適用]をクリックし、要求したことをすべて実行してから[OK]をクリックします。

Eclipse FAQにもこれに関する説明があります。 Eclipse FAQ/C++ 11 Features

Eclipseの画像設定

220
Carsten Greiner

Eclipse CDT 4.4ルナと4.5火星のための命令

まず、プロジェクトを作成する前に、Eclipseシンタックスパーサーを設定します。

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

Command to get compiler specsというタイトルのテキストボックスに、-std=c++11を追加します。

これでプロジェクトを作成できます。構成は作成したプロジェクトの種類によって異なります。

ファイル - >新規 - >プロジェクト - > C/C++ - > C++プロジェクトのように作成されたプロジェクトの場合

作成したプロジェクトを右クリックして開きます

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

-std=c++11というタイトルのテキストボックスにother dialect flagsを入力するか、ISO C++11ドロップダウンからLanguage standardを選択します。

CMakeプロジェクト用

プロジェクト内でEclipseプロジェクトファイルを生成します。

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

その後、生成されたディレクトリを標準のEclipseプロジェクトとしてEclipseにインポートします。プロジェクトを右クリックして開きます

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

CDT GCC Build-in Compiler Settingsを有効にしてContributed PathEntry Containersより上に移動する(これは重要です)

最後の共通ステップ

Project - > C/C++ Indexを再コンパイルして再生成し、Eclipseを再起動してください。

146
Trismegistos

アップデート2016:

gcc 6の変更点 )では、デフォルトのC++言語はCです。 ++ 14。つまり、より新しいまたは古い方言が明示的に必要でない限り、もうEclipseで何もする必要はありません。

ルナと火星

このコミュニティWikiセクションにはTrismegistosによる回答が組み込まれています。

1。プロジェクトを作成する前に、Eclipseシンタックスパーサーを設定します。

「ウィンドウ」 - >「設定」 - >「C/C++」 - >「ビルド」 - >「設定」 - >「ディスカバリー」 - >「CDT GCC組み込みコンパイラー設定」

[コンパイラの仕様を取得するためのコマンド]というテキストボックスに、-std=c++14を追加します。プロジェクトを作成します。構成は作成したプロジェクトの種類によって異なります。

ファイル - >新規作成 - >プロジェクト - > C/C++ - > C++プロジェクトのように作成されたプロジェクトの場合

作成したプロジェクトを右クリックして開きます

[プロパティ] - > [C/C++ビルド] - > [設定] - > [ツール設定] - > [GCC C++コンパイラ] - > [方言]

他の方言フラグと題されたテキストボックスに-std=c++14を入れるか、言語標準ドロップダウンからISO C++ 11を選択してください。

GXX_EXPERIMENTALハックなしでこれを解決する新しい方法があります。

最新バージョンの場合:(現在 ジュノとケプラー ルナ):

Junoの新しいバージョンでは、設定はProject properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()にあります。

旧バージョン2012/2013:

  1. (プロジェクト設定時の)C/C++ビルドの下で、プリプロセッサインクルードパスを見つけて、プロバイダタブに移動します。 CDT GCC Builtin Compiler Settings以外のすべての選択を解除します。次に[共有設定のエントリ]のタグを解除します。 Commandというテキストボックスにオプション-std = c ++ 11を追加して、コンパイラの仕様を取得します。

  2. パスとシンボルに行きます。 [記号]の下の[デフォルトに戻す]をクリックしてから、適用します。


注:

Eclipseはapplyを打つことにこだわっています。設定タブを離れるたびにそれを実行する必要があります。

[自己宣伝]:私は上記に基づいて私自身のより詳細な指示を書きました。 http://scrupulousabstractions.tumblr.com/post/36441490955/Eclipse-mingw-builds

https://stackoverflow.com/a/13635080/1149664 のユーザーNobodyに感謝します

110
Johan Lundberg

最新の(Juno)Eclipse cdtでは、以下が私のために働きました。私自身で__GXX_EXPERIMENTAL_CXX0X__を宣言する必要はありません。これはCDTインデクサーとコンパイラのパラメータとして機能します。

「あなたのプロジェクト名」 - >右クリック - >プロパティ:

C/C++全般 - >プリプロセッサインクルードパス、マクロなど - >「プロバイダ」という名前のタブに切り替えます。

  • "Configuration"のために "Release"を選択します(そしてその後 "debug")。

  • すべてのプロバイダーをオフにして、「CDT GCC組み込みコンパイラー設定」を選択するだけです。

  • 「プロジェクト間で設定エントリを共有する(グローバルプロバイダ)」のチェックを外します。

  • "コンパイラの仕様を取得するためのコマンド"の中で:引用符なしで "add" -std = c ++ 11 "(引用符でも動くかもしれません)

  • 適用を押してオプションを閉じる

  • インデックスを再構築する

これで、すべてのc ++ 11関連のものがインデクサーによって正しく解決されるはずです。

win7 x64、cdt mingw-w64 gcc 4.7.2 をsourceforge上の最新の公式Eclipse

20
Andreas

私のEclipse Junoでも同じ問題がありました。これらのステップは問題を解決しました:

  • Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]に行きます。
  • シンボルを追加します。__ cplusplusと値201103L
15
Jerome

Eclipse CDT Keplerにとって、未解決のstd::threadシンボルを取り除くのに役立ったのは、次のとおりです。

  1. 「設定」 - >「C/C++」 - >「ビルド」 - >「設定」の順に選択します。

  2. 検出タブを選択します

  3. CDT GCC組み込みコンパイラ設定を選択します[共有]

  4. 次のように、「コンパイラの仕様を取得するコマンド」フィールドに-std = c ++ 11を追加します。

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

  1. プロジェクトのOkとRebuild Index.

プロジェクトへの-std=c++11の追加Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other FlagsはKeplerには不十分ですが、Heliosなどの古いバージョンには十分でした。

11
user3348915

私はまだコメントできないので、私自身の答えを書いています:

これは__GXX_EXPERIMENTAL_CXX0X__に関連しており、Eclipse JunoとCDT 8.xに有効です。

この答えのいくつかの部分は他の答えで既にカバーされていますが、私はそれが首尾一貫していることを望みます。

Stdc ++ 11を使用してビルドすることを可能にするためには、コンパイラに特定のフラグを追加する必要があります。あなたはプロジェクトのプロパティを介してそれを行うことができます。プロジェクトプロパティRMBProject propertiesまたはALT + ENTERを変更する。それからC/C++ビルド - >設定 - >ツール設定 - > GCC C++コンパイラ - >その他 - >その他のフラグ。行末に-std = c ++ 11と入力します。GCCの場合、-c -fmessage-length=0 -std=c++11のようになります。 -stdc ++ 11フラグコンパイラ(GCC)を追加することで、__GXX_EXPERIMENTAL_CXX0X__を単独で宣言します。

この時点で、C++ 11の長所をすべて使ってプロジェクトを構築できます。

問題はEclipseがエラーをチェックするための独自のパーサを持っているということです - それはあなたがまだ何もせずにプロジェクトをビルドして実行できると同時にあなたがまだEclipseエディタですべての厄介なエラーを得ている理由です。プロジェクトに__GXX_EXPERIMENTAL_CXX0X__フラグを明示的に宣言することでこの問題を解決する方法があります(Carsten Greinerが言ったように)、それができます:C/C++一般 - >パスと記号 - >記号 - > GNU C++ [追加]をクリックし、__GXX_EXPERIMENTAL_CXX0X__(2つのアンダースコアを追加して追加します)を[名前]に貼り付け、[値]を空白のままにします。そして今、私が最初の答えへのコメントでカバーしたかった余分な部分は、行ってください:C/C++一般 - >プリプロセッサインクルードパスマクロなど - >プロバイダー、そしてCDT Managed Build Setting Entriesを選択し、そしてAPPLYをクリックしてEntriesタブに戻ります。 GNU C++がCDT管理ビルド設定エントリに追加されました。定義されている場合は__GXX_EXPERIMENTAL_CXX0X__が定義されているかどうかを確認します - > APPLYとインデックスを再構築します。

5
ravwojdyla

私にもいくつかの問題がありました(Ubuntu 13.04 64ビット、g ++ - 4.8、Eclipse Juno 3.8.1、CDT 6.0.0)。多くのことが上で述べられています、それらを繰り返して申し訳ありませんが、さらに私は利用して問題を抱えていました

std::thread

c ++ 11の一部として(リンカに-pthreadを追加すると、この問題は解決します)。とにかく、ついにこれらの設定はうまくいきました:

「プロジェクト」 - >「プロパティー」 - >「C/C++ビルド」 - >「設定」 - >「その他」。を追加

-std=c++11

gCCおよびG ++コンパイラ用のフラグ。適用をクリックします。

リンカについては、同じウィンドウ、その他、リンカフラグ、

-pthread

フラグ共有ライブラリ設定、共有オブジェクト名、

-Wl,--no-as-needed

フラグも。適用をクリックします。

C/C++全般 - >パスとシンボル - >シンボルTAB、GNU C++を選択、追加

__GXX_EXPERIMENTAL_CXX0X__

(値なし)

フラグ適用をクリックします。

C/C++全般 - >プリプロセッサインクルードパス.. - >プロバイダタブ:チェック

CDT GCC組み込みコンパイラ設定

「コンパイラの仕様を取得するためのコマンド」に、

-std=c++11

フラグShareのチェックを外します。適用をクリックします。

CDTはビルド設定エントリを管理します。これもチェックしてください。他の2つのチェックを外します。適用をクリックします。

[エントリ]タブの[GNU C++ CDT管理ビルド設定エントリに戻ると、追加したエントリが表示されているはずです。

__GXX_EXPERIMENTAL_CXX0X__

エントリ。

それでおしまい。コーディング時には

std::

たとえば、スレッドクラスを自動補完することができるようになりました。

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

実行時に.

3
Ola Aronsson

ファイルにC++ 11メモリヘッダが含まれていても、Eclipse C/C++はシンボルstd::unique_ptrを認識しません。

GNU C++コンパイラを使用していると仮定すると、これは私が修正したことです。

[プロジェクト] - > [プロパティ] - > [C/C++全般] - > [プリプロセッサインクルードパス] - > GNU C++ - > CDTユーザー設定エントリ

  1. [追加]ボタンをクリックしてください。

  2. ドロップダウンメニューから[プリプロセッサマクロ]を選択します

    Name: __cplusplus     Value:  201103L
    
  3. ApplyをクリックしてからOKをクリックしてプロジェクトに戻ります。

  4. それからあなたのC++インデックスを再構築します。プロジェクト - > C/C++インデックス - >再構築

2
Rubens Gomes

それが私だけで、最高ランクの解決策が私にはうまくいかない、私のEclipseバージョンはSudo apt-get install EclipseをUbuntuにインストールすることによってインストールされた単なる通常のEclipseプラットフォームです。最高ランクのソリューションと2番目のソリューションの両方から、うまく機能させるために私がしたことを以下に説明します(簡単にするためにC++プロジェクトの作成などの他のステップは無視されることに注意してください)。

C++プロジェクトを作成したら

(1)C/C++全般 - >パスと記号 - >記号 - > GNU C++。 [追加]をクリックし、 GXX_EXPERIMENTAL_CXX0X (必ず2つのアンダースコアを追加して先頭に追加)を[名前]に貼り付け、[値]を空白のままにします。

(2)(プロジェクト設定時の)C/C++ビルドの下で、プリプロセッサインクルードパスを見つけてプロバイダタブに移動します。 CDT GCC Builtin Compiler Settings以外のすべての選択を解除します。次に[共有設定のエントリ]のタグを解除します。 Commandというテキストボックスに-std = c ++ 11オプションを追加して、コンパイラの仕様を取得します。

上記の2と2だけのステップを実行した後、それは動作します、Eclipseはunique_ptrを解決することができます、私はなぜこのソリューションが動作するのかわかりません、それが人々を助けることができると思います。

2
doody1986

私にはEclipse Neonをフォローしました Trismegistos上記の答え 、まだ追加のステップを追加しました。

  • [プロジェクト] - > [プロパティ] - > [C++全般] - > [プリプロセッサインクルードパス、マクロなど] - > [プロバイダ] - > [CDT Cross GCC組み込みコンパイラの設定]にフラグを追加します " - std = c ++ 11"

適用してOKをクリックしてください。

乾杯、

男。

1
Guy Avraham

Eclipse LunaでC++ 14をサポートするには、以下のステップを実行できます。

  • C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settingsに、 " - std = c ++ 14"を追加します。
  • C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneousに、 " - std = c ++ 14"を追加します。

プロジェクトのインデックスを再作成して、最終的にEclipseを再起動してください。期待通りに動作するはずです。

0
Jerome
  • プロジェクトを右クリックして[プロパティ]に移動します。
  • C/C++ビルド - >設定 - >ツール設定 - > GCC C++コンパイラ - >その他 - >その他のフラグ。他のフラグのテキストボックスの最後に-lmを付けて、OKをクリックします。
0
Sameera Chanaka

ハックもクリーン版もIndigoでは動作しません。ハックは無視され、必要な設定オプションがありません。明白な理由もなく、buildは機能しなくなった後で機能し始め、有用な理由も提供されません。少なくともコマンドラインから、再現可能な結果が得られます。

0
Jerry Miller

私はstd :: optionalとstd :: swapを使ったCとC++が混在するプロジェクトでEclipse C++ 2019-03を使っても同じような問題がありました。私のために働いたのはこれでした。 「プロパティー」 - >「C/C++ビルド」 - >「設定」 - >「ツール設定」 - >「Cross G ++ Compiler」で、Miscellaneousから-std = gnu ++ 17を削除し、代わりにDialect-> Other Dialect Flagsに入れます。

0
dc42

私はこれをMac上で解決しました。 Homebrewを使って最新バージョンのgcc/g ++をインストールしました。それらは/ usr/local/binにインクルードして/ usr/local/binに着陸します。

私は/ usr/local/binにCDを入れて、g ++ @ 7からシンボリックリンクを作成しました。

それから、MyProject - >プロパティ - > C/C++ビルド - >設定 - > GCC C++コンパイラに行き、コマンドを "g ++"から "/ usr/local/bin/g ++"に変更しました。シンボリックリンクを作成しないことにした場合は、より具体的にすることができます。

リンカーについても同じことをしてください。

適用して適用して閉じる。インデックスを再構築しましょう。しばらくの間、それは厄介な数のエラーを示しました、しかし、私はそれがインデックスを構築している間であったと思います。私がエラーを考え出していた間に、それらはすべてそれ以上のアクションなしで消えました。


私はEclipse - > Properties - > C/C++ - > Core Build Toolchainsに行き、それらを異なるパスで編集することもできることを確認せずに考えますが、それが何をするかわからないです。

0
Joseph Larson