2013-01-09 11 views
51

Mac端末内でC++ 11ソースコードをコンパイルしたいが失敗した。私はg++ -std=c++11g++ -std=c++0xg++ -std=gnu++11g++ -std=gnu++0xを試しましたが、何も働かなかった。ターミナルは常にunrecognized command line optionと読みます。しかし、g++ -std=gnuとそのようなものは正常に動作しました(もちろんC++ 11のソースコードは通過できませんでした)。Mac端末でC++ 11をサポートするC++をコンパイルする方法

C++ 11のサポートを有効にするにはどのオプションを使用しますか?

ところで、私が使用しているコマンドラインツールはXcode内にインストールされており、最新のものであることは間違いありません。

+1

Xcodeに付属のGCCは**最新ではありません**、実際は古代です。 'clang ++'を試してみてください。 –

+0

@ H2CO3涼しく、完璧に働いた。ありがとう。しかし、 'clang ++ 'はC++ 11の機能について警告しました...これらの警告を無効にするオプションはありますか? – 4ae1e1

+0

すべての警告をオフにするには、 '-w'オプションを使用します。 –

答えて

79

g++ではなくclang++を使用してください。また、デフォルトのlibstdC++の代わりにlibC++ライブラリを使用する必要があります。 libstdC++の付属バージョンはかなり古く、したがってC++ 11ライブラリ機能は含まれていません。

clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp 

あなたがxcrunツールを使用してそれを行うことなく、コンパイラや他のツールを実行することができますXcodeのためのコマンドラインツールをインストールしていない場合。

xcrun clang++ -std=c++11 -stdlib=libc++ -Weverything main.cpp 

また、警告を無効にしたい場合は、追加のフラグをコンパイラに渡すことができます。警告メッセージの最後には、警告を有効にする最も特殊なフラグが表示されます。警告を無効にするには、警告名の前にno-を追加します。

たとえば、おそらくC++ 98の互換性に関する警告は必要ありません。これらの警告の最後には、フラグ-Wc++98-compatが表示され、無効にするには-Wno-c++98-compatを渡します。

+0

追加情報をありがとう! – 4ae1e1

+3

あなたが言ったことをちょうどテストしました。実際、単純な 'std :: array'はデフォルトの' libstdC++ 'をノックアウトします。 – 4ae1e1

+0

はい、 '-stdlib = libC++ 'を使わずに' std :: is_heap() 'をコンパイルするのに問題がありました – shiraz

20

XCodeは、g++ではなく、clangclang++をコンパイル時に使用します(カスタマイズしていないと仮定します)。代わりに、試してみてください。私は-stdlib=libc++を残していたことを指摘しbames53の答えに

$ cat t.cpp 
#include <iostream> 

int main() 
{ 
    int* p = nullptr; 
    std::cout << p << std::endl; 
} 
$ clang++ -std=c++11 -stdlib=libc++ t.cpp 
$ ./a.out 
0x0 

感謝を。

-std=c++11の代わりに-std=gnu++11を使用すると、C++ 11モードが有効になり、GNU拡張機能が有効になります。

+0

です。どうもありがとうございました。 – 4ae1e1

+8

-1が何であったのかわかりません。もし '-stdlib = C++'を除外したのであれば、私は速く修正できるので、コメントを書いてよかったでしょう! – Cornstalks

関連する問題