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


135

UbuntuでGLIBCXX_3.4.15を入手するにはどうすればよいですか?コンパイルしている一部のプログラムを実行できません。

私がする時:

strings /usr/lib/libstdc++.so.6 | grep GLIBC

私は得ます:

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
GLIBC_2.2.5
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.4
GLIBC_2.3.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH

助けてくれてありがとう!

回答:


81

私はソースからgcc 4.6をコンパイルしています、そしてどうやら

sudo make install 

これをキャッチできませんでした。探し回って見つけた

gcc/trunk/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.15

私はそれを/ usr / libにコピーし、libstdc ++。so.6を新しいものを指すようにリダイレクトしました。


1
私は同じ問題を抱えており、この投稿/回答はまさに私が探しているものです。どうもありがとう!
yoco

1
これは、libstdc ++。so.6.0.16を除き、gcc 4.6.2でも機能します。ありがとう!
Venesectrix

2
私のはgcc 4.7とlibstdc ++。so.6.0.17です。同じ問題があり、この解決策で修正されました。称賛。
リビット

1
はいあります。apt-getこの問題のベースのソリューションは、ここで説明されています superuser.com/questions/310809/...
aroth

4
@roosevelt:これはOSの問題ではありません。ユーザーがソフトウェアを自分でインストールして、リンカーを正しく使用していないことが問題です。これはFAQです:gcc.gnu.org/onlinedocs/libstdc++
Jonathan Wakely

54

実行可能ファイルをリンクするときに、libstdc ++をg ++に送信されるこのパラメーターと静的にリンクするだけで、過去にこの問題を回避してきました。

-static-libstdc++

ライブラリを静的にリンクすることがオプションである場合、これがおそらく最も速い回避策です。


2
どうもありがとう、私はSOで提案された他のすべての解決策を試しましたが、これ以外は何もうまくいきませんでした。
Itamar Katz

1
あなたの解決策をありがとう、それは私を大いに助けます!
Brightshine、2015年

問題は、ライブラリが見つからないこと、静的にリンクする必要があることではありません。@Hoboからの回答を参照してください。
Dan Mergens

45

私はclangを動作させようとしていました(これも6.0.15が必要です)。 /usr/local/lib/libstdc++.so.6.0.15。グラファイト(実験的なgccバージョン)をインストールしたときにインストールされました。

その場所のライブラリにアクセスする必要がある場合は、次のように定義する必要がありますLD_LIBRARY_PATH

export LD_LIBRARY_PATH=/usr/local/lib:/usr/lib:/usr/local/lib64:/usr/lib64

これを実行した後、clangを動作させることができました。それが誰かに役立つことを願っています。


埋め込みターゲットで作業していたところ、同じ問題が発生しました。私の場合、ソリューションが機能しないようです。実際、ターゲットのバイナリのほとんどは/ libのデフォルトのcライブラリを使用しているため、変更LD_LIBRARY_PATHするとそれらに影響します。それらはすべて新しいライブラリにリンクします。結局のところ、バイナリなどのほとんどのバイナリは機能していません。たとえば、次のようになっていls grepます。:取得中:ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
Mouin

14

matlab engを使用してcコードからm関数を呼び出そうとすると、この問題が発生します。コマンドで発生しますmex -f .. ..

私の解決策:

strings /usr/lib/i386-<tab>/libstdc++.so.6 | grep GLIBC

3.4.15が含まれていることがわかりました

私のシステムには最新のライブラリがあります。

問題はmatlab自体に起因し、それ自体からlibstdc ++。so.6を呼び出します {MATLAB}/bin

そのため、更新されたシステムlibで置き換えるだけです。


これは、Xubuntu 13.04 x64のMatlab 2013b x64でも機能するようです
Marcin

どうもありがとう。私はちょうどにファイルの新しいシンボリックリンクを作成する必要がありました{MATLAB}/bin内のファイルに/usr/lib/まで続いて、再起動 MATLAB。これは、Fedora 14 x64上のMatlab 2010bで動作します。
ウォック

2

同じエラーが発生しました。これは私にとってそれがどのように機能したかです:

  • 現在インストールされているgccでプロジェクトをクリーンアップ
  • それを再コンパイルしました

完璧に働きました!


2

このエラーのために、最新のlibstdc ++。so.6.0.17を他のサーバーからコピーし、ソフトリンクを削除して再作成しました。

1. libstdc ++。so.6.0.15または最新版を他のサーバーから影響を受けるシステムにコピーします。
私の場合、SUSE Linux 11 SP3が最新でした。
2. rm libstdc ++。so.6
3. ln -s libstdc ++。so.6.0.17 libstdc ++。so.6(/ usr / lib64ディレクトリの下)。

nJoy


2

LLVM 3.7バージョンのビルドで同様の問題が発生しました。まず、必要なライブラリがシステムにインストールされているかどうかを確認します。

$locate libstdc++.so.6.*

次に、見つかった場所を$ LD_LIBRARY_PATH環境変数に追加します。


2
これは、GLIBCXX_3.4.15をサポートするlibstdc ++。so.6。* libがある場合にのみ機能します
warunapww

2

ターゲットマシンを制御できない場合があります(たとえば、ライブラリはロックダウンされたエンタープライズシステムで実行する必要があります)。このような場合、GLIBCXXバージョンに対応するGCCのバージョンを使用してコードを再コンパイルする必要があります。その場合、次のことを実行できます。

  1. ターゲットマシンでサポートされているGLIBCXXの最新バージョンを検索しstrings /usr/lib/libstdc++.so.6 | grep GLIBCます。...バージョンがであるとし3.4.19ます。
  2. https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.htmlを使用して、対応するGCCバージョンを見つけます。私たちの場合、これは[4.8.3, 4.9.0)です。

1

gccバージョン4.8.1の場合、エラーは次のようになります。

/ root / bllvm / build / Release + Asserts / bin / llvm-tblgen:/usr/lib64/libstdc++.so.6:version `GLIBCXX_3.4.15 'not found(required by / root / bllvm / build / Release + Asserts / bin / llvm-tblgen)

libstdc ++。so.6.0.18をgcc 4.8.1に準拠した場所で見つけました

それから私はこれが好きです

cp ~/objdir/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.18 /usr/lib64/

rm /usr/lib64/libstdc++.so.6

ln -s libstdc++.so.6.0.18 libstdc++.so.6

問題が解決しました。


1

私はそれらをRPM(libstdc ++のRPM)から抽出し、次に:

export LD_LIBRARY_PATH=.

現在のディレクトリでライブラリを検索するようにシステムを設定します。それから私のプログラムを実行しました。しかし、私の場合、必要な実行可能ファイルを1つ受け取りましたが、それはシステム全体の変更ではありませんでした。


0

私は同様の問題を抱えていましたが、次のように、libstdc++コンパイルしているプログラムに静的にリンクすることで解決しました:

$ LIBS=-lstdc++ ./configure ... etc.

通常の代わりに

$ ./configure ... etc.

実行時に共有ライブラリをロードするこのソリューションには問題があるかもしれませんが、コメントするほど十分に問題を調査していません。



0

ユーザーを自分から別のユーザーに変更したため、同じ問題が発生しました。

su

何らかの理由で、通常のコンパイルを実行した後、それを実行できませんでした(同じエラーメッセージ)。他のユーザーアカウントに直接SSHで接続できます。


これは実際には質問の答えにはなりません。別の質問がある場合は、[ 質問する]をクリックして質問できます。バウンティ追加して、この質問により注目を集めることもできます。
ravron、2015

いいえ、まったく同じ問題があったためです。ユーザーの変更が原因です。rootに変更するなど、他の誰かに起こった可能性もあります。
HelloWorld、2015

私の間違い!私もあなたに問題があるように見えた最初の行に投げられました。続ける!
ravron、2015

私はUbuntuも使用し、プログラムをコンパイルしようとしたところ、質問と同じエラーメッセージが表示されました。私のエラーは、suコマンドを使用して別のユーザーアカウントで実行していたことでした。これが問題の理由と方法に対処しているため、これは質問の答えになると思います。それは確かに可能性です。
HelloWorld 2015

そして、1人のユーザーが新しいライブラリを見つけるためにLD_LIBRARY_PATHを設定しましたが、他のユーザーは設定していませんでしたか?これは、この質問の特定のコンテキストでは少し遠くに思われます。
Marc Glisse、2015

0

gccコンパイラの複数のバージョンをインストールしていて、デフォルトのインストールよりも新しいバージョンを使用する必要がありました。私はLinuxシステムのシステム管理者ではないので、/ usr / libや上記の他の提案の多くを変更することはできません。私はこの問題に遭遇し、最終的には64ビットライブラリ(lib64)ディレクトリではなく32ビットライブラリディレクトリへのパスを設定するまで追跡しました。32ビットディレクトリのライブラリには互換性がないため、システムはデフォルトで古いバージョンになり、古くなっていました。

参照しているパスに-Lを使用すると、「-lstdc ++を検索するときに互換性のないlibstdc ++。soをスキップする」という警告が表示されました。これは私が最終的に問題を解決するのに役立つヒントでした。


0

gccバージョン4.8.1 (GCC)と同じことですlibstdc++.so.6.0.18/usr/lib/x86_64-linux-gnu私のubuntuボックスにコピーする必要がありました。


0

私の場合、LD_LIBRARY_PATHの最初の/ usr / lib64の前に/ usr / local / lib64がありました。(私はllvm 3.9をビルドしていました)。
llvm 3.9をコンパイルするためにインストールした新しいgccコンパイラには、/ usr / local / lib64の下に新しいGLIBCXXライブラリを使用するライブラリがあったため、リンカーが/ usr / local / lib64を最初に表示するようにLD_LIBRARY_PATHを修正しました。
これでこの問題は解決しました。


0

ビルド中に-static-libstdc ++を使用しました。w /、a.outを実行できます

g++ test.cpp -static-libstdc++

0

テスト目的:

元のマシンでライブラリを見つけ、実行可能ファイルと同じディレクトリにコピーします。

$ ldconfig -p | grep libstdc
        libstdc++.so.6 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libstdc++.so.6
        libstdc++.so.6 (libc6) => /usr/lib32/libstdc++.so.6
$ cp /usr/lib/x86_64-linux-gnu/libstdc++.so.6 .

次に、この同じライブラリをターゲットマシンにコピーし、実行可能ファイルを実行します。

LD_LIBRARY_PATH=. ./myexecutable

注:上記のコマンドは一時的なものです。システム全体の変更ではありません。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.