74

Macターミナル内でC++11ソースコードをコンパイルしたかったのですが、失敗しました。g++ -std=c++11、、を試しましたがg++ -std=c++0x、何も機能しませんでした。ターミナルは常に読み取ります。ただし、そのようなものは正常に機能しました(もちろん、C ++ 11ソースコードは渡すことができませんでした)。g++ -std=gnu++11g++ -std=gnu++0xunrecognized command line optiong++ -std=gnu

C ++ 11サポートをオンにするには、どのオプションを使用する必要がありますか?

ちなみに、私が使用しているコマンドラインツールはXcode内にインストールされており、最新のものであると確信しています。

4

2 に答える 2

108

他の人が指摘しているように、clang++ではなくを使用する必要がありますg++。また、デフォルトのlibstdc++の代わりにlibc++ライブラリを使用する必要があります。含まれているバージョンのlibstdc++はかなり古いため、C++11ライブラリ機能は含まれていません。

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

Xcodeのコマンドラインツールをインストールしていない場合は、ツールを使用して、コンパイラやその他のツールをインストールせずに実行できxcrunます。

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

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

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

于 2013-01-09T05:52:39.457 に答える
27

XCodeはコンパイル時に使用しますが、使用しませんclang(カスタマイズしていない場合)。代わりに、次を試してください。clang++g++

$ 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

私が省略したことを指摘してくれたbames53の答えに感謝し-stdlib=libc++ます。

一部のGNU拡張機能を使用する(およびC ++ 11も使用する)場合は、-std=gnu++11の代わりに使用できます-std=c++11。これにより、C ++ 11モードがオンになり、GNU拡張機能も有効になります。

于 2013-01-09T05:47:28.693 に答える