最新のGCCバージョンを使いたいです。そのため、GCC 10をコンパイルして非標準ディレクトリにインストールしました/software/gcc10/
。今まではそんなに良くなった。
しかし、実際にこの新しいバージョンのGCCを使用しようとしたときに問題が発生しました。そのような変数をPATH
含むように変数を変更し、システムが(私のシステムのGCC 8コンパイラの代わりに)新しいGCC 10コンパイラを探していることを確認しました。/software/gcc10/bin/
gcc --version
ただし、この設定でプログラムをコンパイルしようとすると、std::filesystem
GCC 10の一部である必要があるlibstdc ++への未定義参照へのエラーが発生します。私の仮定は現在、最新のコンパイラを使用していますが、リンカはまだ/software/gcc10/lib64
。
適切なディレクトリを含めるように変更してみましたが、LD_LIBRARY_PATH
何の効果もないようです。
gcc
オプションを使用して実行結果を確認しながら、環境変数を誤って-v
見つけました。LIBRARY_PATH
gccドキュメント次のように使用してください。
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