使用する libstdc++ の指定

使用する libstdc++ の指定

最新のGCCバージョンを使いたいです。そのため、GCC 10をコンパイルして非標準ディレクトリにインストールしました/software/gcc10/。今まではそんなに良くなった。

しかし、実際にこの新しいバージョンのGCCを使用しようとしたときに問題が発生しました。そのような変数をPATH含むように変数を変更し、システムが(私のシステムのGCC 8コンパイラの代わりに)新しいGCC 10コンパイラを探していることを確認しました。/software/gcc10/bin/gcc --version

ただし、この設定でプログラムをコンパイルしようとすると、std::filesystemGCC 10の一部である必要があるlibstdc ++への未定義参照へのエラーが発生します。私の仮定は現在、最新のコンパイラを使用していますが、リンカはまだ/software/gcc10/lib64

適切なディレクトリを含めるように変更してみましたが、LD_LIBRARY_PATH何の効果もないようです。

gccオプションを使用して実行結果を確認しながら、環境変数を誤って-v見つけました。LIBRARY_PATHgccドキュメント次のように使用してください。

LIBRARY_PATHの値は、PATHと非常によく似たコロンで区切られたディレクトリのリストです。ネイティブコンパイラとして設定すると、GCCはGCC_EXEC_PREFIXを使用して特別なリンカファイルが見つからない場合は、指定されたディレクトリを検索します。 -lオプションを使用して汎用ライブラリを検索すると、GCCとの接続はこれらのディレクトリを使用しますが(最初に-Lで指定されたディレクトリを含む)。

実際、LIBRARY_PATHそれに応じて変数を設定すると、プログラムを正常にコンパイルできます。しかし、これはgccに固有の解決策であるようで、これを行うより標準的な方法があるかどうか疑問に思うことはできません(たとえば、リンクするC ++標準ライブラリを見つける場所をclangに伝えます)。

より良い解決策は、新しいGCC 10コンパイラが常にGCC 10 stdlibを使用するようにすることです。一方、システムの GCC 8 コンパイラを呼び出すと、常にシステム GCC 8 stdlib に接続されます。特定のstdlibを使用する必要があると特定のコンパイラバイナリに通知する方法はありますか?

答え1

環境LIBRARY_PATH変数はかなり標準的です。ほとんどのコンパイラはこれを知っています。

C_INCLUDE_PATHまた、および/またはを使用する必要がありますCPLUS_INCLUDE_PATH。これらの2つはgccにとってより具体的です(他のコンパイラはINCLUDE言語の分離を好みません)。

環境変数を完全に無視し、コマンドラインから直接正しい libstdc++ を指定することもできます。

g++ main.cpp /software/gcc10/.../libstdc++.a

関連情報