Gccでコンパイルするときに、コンパイラとリンカに-stdlib=libstdc++
フラグを使用する必要があるのはいつですか?
コンパイラは自動的にlibstdc ++を使用しますか?
Ubuntu 13.10でgcc4.8.2を使用していますが、c ++ 11標準を使用したいと思います。私はすでに-std=c++11
をコンパイラに渡します。
Linuxの場合:一般的に、一般に利用可能なすべてのLinuxディストリビューションはデフォルトでlibstdc ++を使用し、GCCのすべての最新バージョンにはC++ 11をサポートするlibstdc ++が付属しています。ここでC++ 11コードをコンパイルする場合は、次のいずれかを使用します。
g++ -std=c++11 input.cxx -o a.out
g++ -std=gnu++11 input.cxx -o a.out
OS XでMavericksより前:g++
は実際にはclang++
のエイリアスであり、Appleの古いバージョンのlibstdc ++がデフォルトでした。 -stdlib=libc++
を渡すことにより、libc ++(c ++ 11ライブラリのサポートを含む)を使用できます。ここでC++ 11コードをコンパイルする場合は、次のいずれかを使用します。
g++ -std=c++11 -stdlib=libc++ input.cxx -o a.out
g++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out
clang++ -std=c++11 -stdlib=libc++ input.cxx -o a.out
clang++ -std=gnu++11 -stdlib=libc++ input.cxx -o a.out
OS XではMavericks以降:libc ++がデフォルトです。 -stdlib=libstdc++
を渡すことにより、Appleの古いバージョンのlibstdc ++(c ++ 11ライブラリのサポートを含まない)を使用できます。
clang++ -std=c++11 input.cxx -o a.out
clang++ -std=gnu++11 input.cxx -o a.out
Gccでコンパイルするときに、コンパイラーとリンカーに
-stdlib=libstdc++
フラグを使用する必要があるのはいつですか?
短い答え:never
長い回答:-stdlib
はClangフラグであり、これまでにリリースされたGCCのどのバージョンでも動作しません。 Mac OS Xでは、gcc
およびg++
コマンドが実際にはClangnotGCCおよびlibstdc ++のバージョンのエイリアスである場合がありますthat Apple shipsはancient(2008年頃)なので、もちろんC++ 11をサポートしていません。 OS XでClangのふりをするGCCを使用する場合、-stdlib=libc++
を使用してClangの新しいC++ 11互換ライブラリを選択するか、-stdlib=libstdc++
を使用してpre -博物館に属するlibstdc ++のC++ 11アンティークバージョンですが、GNU/Linuxでは、gcc
およびg++
は実際にはClangではなくGCCであるため、-stdlib
オプションはありません。まったく働きます。
コンパイラは自動的にlibstdc ++を使用しますか?
はい、GCCは-nostdlib
オプションを使用してno標準ライブラリを使用するように指示しない限り、常にlibstdc ++を使用します(この場合、どちらかが必要です)標準ライブラリ機能の使用を避けるため、または-I
および-L
および-l
フラグを使用して、ヘッダーとライブラリファイルの代替セットを指すようにします。
Ubuntu 13.10でgcc4.8.2を使用していますが、c ++ 11標準を使用したいと思います。私はすでに
-std=c++11
をコンパイラに渡します。
他に何もする必要はありません。 GCCには、C++標準ライブラリ(libstdc ++)の独自の実装が付属しています。GCC自体と一緒に開発およびテストされるため、GCCのバージョンとlibstdc ++のバージョンは100%互換性があります。 -std=c++11
でコンパイルすると、g++
コンパイラーのC++ 11機能とlibstdc ++ヘッダーのC++ 11機能が有効になります。
Gccフロントエンドではなくg ++フロントエンドを使用する場合、コンパイラは自動的にlibstdc ++を使用します。