2016-04-11 124 views
1

コンパイラフラグ "-lstdC++"を呼び出すことによってどの標準が呼び出されますか? "-lstdC++ 11"と同様に、C++ 11標準が呼び出され、同じことが "-std = C++ 11"によって呼び出されます。-lstdC++と-lstdC++の違い11

答えて

2

-lフラグは、規格準拠を変更しないため、リンクするライブラリを指定するために使用されます。

従って、-lstdc++は、libstdc++.aまたはlibstdc++.soという名前のライブラリにリンクします。私のシステムでは、そのライブラリは/usr/lib/x86_64-linux-gnu/libstdc++.so.6にありますが、一般にあなたのシステムでは異なります。

これはlibSDL.soとリンクする-lSDLのようなものを指定すること、またはlibpng.soとリンクする-lpngを指定することと変わりありません。

特定のバージョンのC++標準を使用する場合は、-stdオプション(-std=c++11など)を使用します。これにより、正しいライブラリがリンクされるので、何もする必要はありません(例えば、-lオプションを使用するなど)。

+0

にしかし、私の場合には、追加するパスを含めるi「は-std = C++ 11」を追加してもなく、含まなっているライブラリは、「あります - lstdC++ "ではなく、" -lstdC++ 11 "ではありません。 – geek

+1

@geek:これはライブラリの名前にすぎません。コンパイラは 'g ++'とも呼ばれ、 'g ++ 11'という別のコンパイラを使う必要はありません。 –

+0

@geekもちろん、ライブラリはまだ 'stdC++'と呼ばれています...実際にはあなたのファイルシステム上に別のライブラリがあります – donkopotamus

2

コンパイラはここでは指定しませんが、それはclang++またはg++などと似ているとします。

次に、フラグ-l<library>は、リンクするときにライブラリ<library>を検索するように指定するだけです。この検索には、ライブラリパスに追加された可能性のある検索ディレクトリおよびその他の標準的なリストが含まれます。

したがって、フラグ-lstdc++は、リンク時にライブラリを検索する必要があることを示しています。 は、コンパイラがコンパイルしていると考えるはずの、C++のバージョンにはという効果がありません。対照的に

、フラグ-std=c++は、一般的に、コンパイラへのスイッチとして作用する:

  • が使用中のC++のバージョンを示しています。
  • 自動的に対応するライブラリを引き起こし、検索パス
関連する問題