1. ホーム
  2. c++

[解決済み] /usr/lib/x86_64-linux-gnu/libstdc++.so.6: バージョン CXXABI_1.3.8' が見つかりませんでした。

2023-06-15 01:20:24

質問

make install" - ターゲット "install-target-libstdc++v3" をインストールし、暗示する make ターゲットは、実際には準備ができたことを意味しないことが判明しました。

このような make ターゲットがそうしてくれると思い込んでいたので、何が間違っているのかとしばらく困っていました。

どうすれば解決するのでしょうか?

ライブラリのパスを LD_LIBRARY_PATH 環境変数に追加します。

TL;DR

GCCは、正しいバージョンを見つけられないとき、ライブラリがどこにあるかを手動で教えることを要求します。これはいくつかの方法でできます。 LD_LIBRARY_PATH .

export LD_LIBRARY_PATH="/usr/local/lib64/:$LD_LIBRARY_PATH"

いくつかの場合、ライブラリのパスは /usr/local/lib64/ . 他の人は、ライブラリのパスが /usr/lib/x86_64-linux-gnu/ で動作することを報告している人もいます。

なぜ、ライブラリを LD_LIBRARY_PATH ?

GCCをコンパイルしインストールするとき、これらのディレクトリのひとつにライブラリを置きますが、それはそれだけのことです。によると の FAQ によると libstdc++ というエラーが出た場合、ダイナミックリンカーが間違ったバージョンの libstdc++ 共有ライブラリーの間違ったバージョンを見つけたことを意味します。リンカーは正しいバージョンを見つけることができないので、リンカーにどこで libstdc++ ライブラリがある場所を教える必要があります。

これを解決する最も簡単な方法は、LD_LIBRARY_PATH環境変数を使用することです。これは、リンカーが共有ライブラリを検索するディレクトリのコロンで区切られたリストです。

この問題を解決するには、他の方法もあります。この方法と、簡単に述べた他の解決策は、インストール時に gcc をインストールしたときに、make の出力を読めば、この方法と他の解決策を簡単に見つけることができます。

にライブラリがインストールされました。

/usr/local/lib/../lib32

LIBDIR にインストールされたライブラリに対してリンクしたい場合、 libtool を使用してライブラリのフルパス名を指定するか、リンク時に `-LLIBDIR' フラグを使用して、少なくとも以下のいずれかを実行する必要があります。

  • 実行時に LIBDIR を `LD_LIBRARY_PATH' 環境変数に追加する。
  • リンク時に環境変数 `LD_RUN_PATH' にLIBDIRを追加する。
  • Wl,-rpath -Wl,LIBDIR'リンカーフラグを使用する。
  • システム管理者に `/etc/ld.so.conf' に LIBDIR を追加してもらう。

ld(1) や ld.so(8) のマニュアルページなど、共有ライブラリに関するオペレーティングシステムのドキュメントを参照するとより詳しい情報が得られます。

うーん、簡単だった! また、"インストールされたライブラリに対してリンクしたいと思うことがあったら、"マジで?