web-dev-qa-db-ja.com

修正方法:/usr/lib/libstdc++.so.6:バージョン `GLIBCXX_3.4.15 'が見つかりません

だから私は今、この修正を見つけるのに必死です。共有ライブラリ.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 ++(i think)をあるディレクトリに移動し、idkをそのディレクトリにポイントまたはリンクすることで修正した人もいますが、それはただ戸惑っています。

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

(編集:)-実行中: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)`
52
user1667191

-static-libstdc++ gccオプションを使用してlibstdc ++に静的にリンクします。

37
kerim

次をインストールしてこの問題を修正しました: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に必要)

8
Shubhamoy

デフォルト以外のリポジトリから最新バージョンをインストールするだけです:

$ Sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ Sudo apt-get update
$ Sudo apt-get install libstdc++6-4.7-dev
6
luart

この問題は、最新のlibstdc ++をインストールすることで解決できます。

$ Sudo add-apt-repository ppa:ubuntu-toolchain-r/test
$ Sudo apt-get update
$ Sudo apt-get install libstdc++6-7-dbg
4
weiyixie

上で、あなたは、あなたの複製するためのステップの一部としてあなたがコンパイルすることについて言及しましたが、それから、下で、あなたは、

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

これを同じディストリビューションでコンパイルしたかどうか、そして同じディストリビューションの異なるバージョンでさえ、特にC++アプリケーションでは重要な詳細です。

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

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

基本的に、異なるディストリビューション(および場合によっては異なるgccバージョン)でc ++に対してコンパイルした場合、これが問題の原因になる可能性があります。

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

  1. 最善の策-現在のシステムで.soをコンパイルしていない場合は、.soを再コンパイルします。ランタイムのシステム環境に問題がある場合は、コンパイルでも問題が発生する可能性があります。
  2. アプリケーションとともに他のコンパイラのc ++ライブラリをバンドルします。これは、同じディストリビューションである場合にのみ実行可能です...しかし、独自のコンパイラを展開した場合、これは便利なトリックです。また、そのルートに行く場合は、LD_LIBRARY_PATHを設定し、バンドルされたstdc ++ライブラリを含むパスにエクスポートする必要があります。
3
yggdrasil

誰かが私と同じ問題を抱えている場合-Ubuntu 14.04リポジトリから12.04マシンにインストールしないようにしてください-このエラーが発生します。適切なリポジトリから再インストールすると、問題が修正されました。

1
Rob Quist

これは私のために働いた:

cp <path_to>/libstdc++.so.6 $PWD
./<executable>

この情報は@kerinから来ました(上記のコメント):

あなたがチェックアウトするかもしれません http://stackoverflow.com/questions/13636513/linking-libstdc-statically-any-gotchas

そのリンクから:

新しいlibstdc ++。soを実行可能ファイルと同じディレクトリに配置すると、実行時に検出され、問題が解決します。

Libstdc ++。so.6は/ usr/lib64 /から来ているというエラーが出ていましたが、これはリンク先のライブラリではありません!メッセージは次のように見えました。

<executing_binary>: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found (required by <executing_binary>)

LD_LIBRARY_PATHにディレクトリがあること(およびそれが最初のパスであること)を確認しました。何らかの理由で、実行時にまだ/usr/lib64/libstdc++.so.6を見ていました。

上記の記事からアドバイスを受けて、実行可能ファイルを含むディレクトリにリンクした場所からlibstdc ++。so.6をコピーし、そこから実行すると動作しました!

0
nikc

おそらく、この質問に対する答えもここで役立ちます: libstdc ++。so.6を見つける方法:RHEL 6のGLIBCXX_3.4.19を含む?

curl -O http://ftp.de.debian.org/debian/pool/main/g/gcc-4.7/libstdc++6-4.7-dbg_4.7.2-5_i386.deb
ar -x libstdc++6-4.7-dbg_4.7.2-5_i386.deb && tar xvf data.tar.gz
mkdir backup
cp /usr/lib/libstdc++.so* backup/
cp ./usr/lib/i386-linux-gnu/debug/libstdc++.so.6.0.17 /usr/lib
ln -s libstdc++.so.6.0.17 libstdc++.so.6
0
Serge Rogatch