12

これはすべて巨大な混乱のようです。
私が欲しいのはC++11を実装するコンパイラだけなので、を使用できます<chrono>。しかし、私は最初からとても混乱しています。

現在、G ++を呼び出してプログラムを作成していますが、を介してバージョンを確認すると、次の$ g++ -vようになります。

gccバージョン4.2.1(Apple Inc.ビルド5658に基づく)(LLVMビルド2336.11.00)


どうしたの?G ++を使用していますか?GCC?LLVM?わからない。それらは同じものですか?


だから今私はgnu.org経由でGCC4.7をビルドしてダウンロードしようとしていますが、ガイドが何について話しているのかわかりません。知らないことの頭字語はこれほど多く見たことがありません。

なぜこれほど複雑なのですか?これらすべてのバージョンはどうなっていますか?一部のバージョンはC ++ 11の一部のみを実装し、他のバージョンは実装していませんか?

4

3 に答える 3

22

これがOSXの状況です。

デフォルトで2つのC++コンパイラがインストールされています。

[5:49pm][wlynch@watermelon ~] g++ --version
i686-apple-darwin11-llvm-g++-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)

[5:49pm][wlynch@watermelon ~] clang++ --version
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)

g ++はllvm-gccを実行しています。これはgccフロントエンドであり、次にllvmバックエンドです。

clang ++はclangを実行しています。これは、clangフロントエンドであり、次にllvmバックエンドです。

他のパッケージをインストールせずにOSXでC++11コンパイラが必要な場合、唯一のオプションはclangコンパイラを使用することです。

必要なフラグは次のとおりです。

clang++ -stdlib=libc++ -std=gnu++11

私が渡す2つのフラグを説明するには:

  • -stdlib=libc++gnulibstdc++の代わりにlibc++標準ライブラリを使用します。OS Xでは、libc++バージョンはc++11をサポートしています。gnulibstdc++のものはそうではありません。
  • -std=gnu++11ラムダや列挙型クラスなどのc++11コード機能をサポートするようにコンパイラーに指示します。を渡すこともできます-std=c++11。これは似ていますが、一般的に期待されるいくつかのgnu拡張機能を有効にしません。

OS X 10.9のアップデート:OS X Mavericksの時点で、g++とclang++の両方が実際にclangを使用しています。唯一の違いは、g ++が意味-stdlib=libstdc++し、clang++が意味すること-stdlib=libc++です。したがって、Mavericksでは、C ++ 11を使用する場合は、上記のアドバイスに従うか、次のようにすることができます。

clang++ -std=gnu++11

OS X 10.10のアップデート:OS X Yosemiteの時点では、g++はまだ変装しています。ただし、どちらもデフォルトでlibstdc++を使用しなくなりました。現在、両方ともlibc++上にあります。

于 2013-02-01T23:51:46.977 に答える
0

Xcode4.6と最新のコマンドラインツールを使用しているようです。これはリリースノートからのものです:

Important: The LLVM GCC compiler does not include the latest Objective-C and 
C++11 features. Xcode 4.6 is the last major Xcode release which includes the 
LLVM GCC compiler and the GDB debugger. Please migrate your projects to use the 
LLVM compiler and LLDB debugger…

c++代わりに使用したいと思います:

$ c++ -v
Apple LLVM version 4.2 (clang-425.0.24) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.2.0
Thread model: posix
于 2013-02-01T23:42:22.650 に答える
0

@sharth:XCode 5.0のリリース以降、Macの状況は大幅に変化しました。clang /clang++はデフォルトのC/C++コンパイラです。これらは私が信じているLLVMバージョン3.3に対応しており、このバージョンのclang++は完全にC++11に準拠しています。clang++ --versionMacでは「5.0.x」のようなバージョン番号が返されますが、これはXCodeバージョンを参照していることに注意してください。

私はC++11プロジェクトでAppleclang++を何ヶ月も使用していますが、これまでのところ問題は発生していません。現時点でMacで他のC++コンパイラを使用する理由はまったくありません:-)

GCC /G++の状況はそれほどバラ色ではありません。最新バージョンのG++(4.8.2)は、ほとんどのC ++ 11標準を実装していますが、標準ライブラリは準拠していません。たとえば、libstdc ++には実装されていませんが、コードを実行し、正規表現コンストラクターが-sstd::regexをスローした場合にのみこれがわかります。std::regex_error(前述の小さなプロジェクトをLinuxに移植しようとしたときに、これは難しい方法でした。)コミュニティは、G++の4.9リリースで完全なコンプライアンスが達成されると信じています。それまでは、LinuxでもClangコンパイラを使用する必要があります。

最新のインテルC++コンパイラー・スイートにアクセスできないため、どの程度準拠しているかわかりませんicpc

于 2014-01-30T16:41:38.513 に答える