65

だから私は今、これに対する修正を見つけることに必死です。共有ライブラリ .so を Ubuntu 32 ビットでコンパイルしています (Debian と Ubuntu 64 ビットで試してみましたが、どちらも機能しませんでした)

/usr/lib/libstdc++.so.6: version ``GLIBCXX_3.4.15' not foundプラグインをロードしようとするたびに、次のようになります。

このエラーが発生する方法は次のとおりです。

  1. 最新の Ubuntu 32 ビットをインストールする
  2. sudo apt-get install build-essential
  3. プラグイン (.so) をコンパイルしてロードする

ここに私が見つけて試したいくつかのリンクがありますが、どれもうまくいきませんでした:

(私の古い質問:この質問を投稿してから数日後に何とか修正しましたが、正確にどのように修正したか思い出せません)

私の質問

同じ問題を抱えている別のユーザー

そしてもう一つ

libstdc++(と思う)をあるディレクトリに移動し、そのディレクトリにidk whatを指定またはリンクすることで修正した人もいますが、それは私を困惑させました。

誰でも修正を知っていますか?

(編集:) - Running:strings /usr/lib/libstdc++.so.6 | grep GLIBC端末で: が表示されstrings '/usr/lib/libstdc++.so.6': No such fileます。それが問題でしょうか?もしそうなら、どうすればこのライブラリをインストールできますか?

(Edit2:)解決策を知っている人はいますか?

(Edit3) まだ解決策が必要です。共有ライブラリがコンパイルされたディストリビューションを確認する方法はありますか? 少し前にこの同じライブラリをコンパイルしたことは知っていますが、思い出せません!!

(Edit4)ldd my_lib_.soは私に与えます:

    linux-gate.so.1 =>  (0xb77d7000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb76c1000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb76a4000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74fa000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb74ce000)
    /lib/ld-linux.so.2 (0xb77d8000)

ldd program_im_loading_so_into私に与えます:

    linux-gate.so.1 =>  (0xb77d8000)
    libdl.so.2 => /lib/i386-linux-gnu/libdl.so.2 (0xb77c0000)
    libpthread.so.0 => /lib/i386-linux-gnu/libpthread.so.0 (0xb77a5000)
    libstdc++.so.6 => /usr/lib/i386-linux-gnu/libstdc++.so.6 (0xb76bb000)
    libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb768f000)
    libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0xb7672000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb74c9000)
    /lib/ld-linux.so.2 (0xb77d9000)

実行すると、次のstrings /usr/lib/i386-linux-gnu/libstdc++.so.6 | grep GLIBCXXようになります。

GLIBCXX_3.4
GLIBCXX_3.4.1
GLIBCXX_3.4.2
GLIBCXX_3.4.3
GLIBCXX_3.4.4
GLIBCXX_3.4.5
GLIBCXX_3.4.6
GLIBCXX_3.4.7
GLIBCXX_3.4.8
GLIBCXX_3.4.9
GLIBCXX_3.4.10
GLIBCXX_3.4.11
GLIBCXX_3.4.12
GLIBCXX_3.4.13
GLIBCXX_3.4.14
GLIBCXX_3.4.15
GLIBCXX_3.4.16
GLIBCXX_3.4.17
GLIBCXX_3.4.18
GLIBCXX_3.4.19
GLIBCXX_DEBUG_MESSAGE_LENGTH

そして最後に、これが私のgccバージョンです:

`gcc version 4.6.4 (Ubuntu/Linaro 4.6.4-1ubuntu1~12.04)`
4

9 に答える 9

43

-static-libstdc++gcc オプションで libstdc++ に静的にリンクします。

于 2013-11-15T08:57:20.560 に答える
11

以下をインストールして、この問題を修正しました。sudo apt-get install libstdc++6

私の場合、MongoDB 3.0.1 をインストールした後にこの問題に遭遇しました。

mongo: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: バージョン `GLIBCXX_3.4.18' が見つかりません (mongo が必要)

于 2015-03-25T18:16:30.130 に答える
3

上記では、再現する手順の一部としてコンパイルすることについて言及していますが、以下では、次のように編集しました。

「共有ライブラリがコンパイルされたディストリビューションを確認する方法はありますか?」

これを同じディストリビューションでコンパイルしたかどうか、また同じディストリビューションの別のバージョンであっても、特に C++ アプリケーションの場合は重要な詳細です。

私が知る限り、libstdc++ を含む C++ ライブラリにリンクすると、さまざまな結果が生じる可能性があります。これは、異なるバージョンの c++ での再コンパイルに関する関連する質問です。

c++11 でライブラリを再コンパイルする必要がありますか?

基本的に、別のディストリビューション (およびおそらく別の gcc バージョン) で c++ に対してコンパイルした場合、これが問題を引き起こしている可能性があります。

次の 2 つのオプションがあると思います。

  1. あなたの最善の策-現在のシステムでコンパイルしていない場合は、.soを再コンパイルしてください。ランタイムのシステム環境に問題がある場合、コンパイルで問題が発生することもあります。
  2. 他のコンパイラの C++ ライブラリをアプリケーションと一緒にバンドルします。これは、同じディストリビューションである場合にのみ実行可能かもしれません...しかし、独自のコンパイラをロールした場合、これは便利なトリックです。また、バンドルされた stdc++ ライブラリを含むパスに LD_LIBRARY_PATH を設定してエクスポートする必要があります。
于 2013-11-03T19:01:32.847 に答える