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
助けてくれてありがとう!
私はソースから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をリダイレクトしましたが、今ではすべてが機能します。
過去に、実行可能ファイルをリンクするときにg ++に送信されるこのパラメーターにlibstdc ++を静的にリンクするだけで、この問題を回避しています。
-static-libstdc++
ライブラリ内の静的リンクがオプションである場合、これがおそらく最も迅速な回避策です。
私は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を動作させることができました。それが誰かに役立つことを願っています。
Matlab engを使用してcコードからm関数を呼び出そうとすると、この問題が発生します。コマンドmex -f .. ..
で発生します
私の解決策:
strings /usr/lib/i386-<tab>/libstdc++.so.6 | grep GLIBC
3.4.15が含まれていることがわかりました
私のシステムには最新のライブラリがあります。
問題はmatlab自体に由来し、{MATLAB}/bin
から独自のlibstdc ++。so.6を呼び出します
そのため、更新されたシステムライブラリに置き換えるだけです。
同じエラーが発生しました。これは私のために働いた方法です:
完全に機能しました!
LLVM 3.7バージョンをビルドするとき、同様の問題に直面しました。まず、必要なライブラリがシステムにインストールされているかどうかを確認します。
$locate libstdc++.so.6.*
次に、見つかった場所を$ LD_LIBRARY_PATH環境変数に追加します。
このエラーのために、他のサーバーから最新の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
gccバージョン4.8.1では、エラーは次のようになります。
/ root/bllvm/build/Release + Asserts/bin/llvm-tblgen:/usr/lib64/libstdc++.so.6:バージョン `GLIBCXX_3.4.15 'が見つかりません(/ root/bllvm/build/Release + Asserts /で必要) bin/llvm-tblgen)
Gcc 4.8.1をコンパイルした場所でlibstdc ++。so.6.0.18を見つけました
それから私はこれが好きです
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
問題が解決しました。
ターゲットマシンを制御しない場合があります(たとえば、ロックダウンされたエンタープライズシステムでライブラリを実行する必要がある場合)。そのような場合、GLIBCXXバージョンに対応するGCCのバージョンを使用してコードを再コンパイルする必要があります。その場合、次のことができます。
strings /usr/lib/libstdc++.so.6 | grep GLIBC
...バージョンが3.4.19
であるとします。[4.8.3, 4.9.0)
です。RPMからそれらを抽出し( libstdc ++の場合はRPM )、その後:
export LD_LIBRARY_PATH=.
現在のディレクトリでライブラリを検索するようにシステムを設定します。それからちょうど私のプログラムを実行しました。しかし、私の場合、必要な単一の実行可能ファイルを受け取りましたが、システム全体の変更ではありませんでした。
ビルド中に-static-libstdc ++を使用しました。 w /それ、a.outを実行できます
g++ test.cpp -static-libstdc++
私の場合、LD_LIBRARY_PATHには/ usr/local/lib64の前に最初に/ usr/lib64がありました。 (llvm 3.9を作成していました)。
llvm 3.9をコンパイルするためにインストールした新しいgccコンパイラーには、/ usr/local/lib64の下に新しいGLIBCXXライブラリーを使用するライブラリーがありました。
これでこの問題は解決しました。
私は同様の問題を抱えていましたが、libstdc++
をコンパイル中のプログラムに静的にリンクすることで解決しました:
$ LIBS=-lstdc++ ./configure ... etc.
いつもの代わりに
$ ./configure ... etc.
実行時の共有ライブラリのロードに関連するこのソリューションには問題がある可能性がありますが、コメントするほど深くこの問題を検討していません。
Gccバージョン4.8.1 (GCC)
およびlibstdc++.so.6.0.18
でも同じです。私のubuntuボックスの/usr/lib/x86_64-linux-gnu
ここにコピーしなければなりませんでした。
以前にも同じ問題があり、これを修正しました。これは手順を見つけることができました matlabでエラー「GLIBCXX_3.4.15」を修正
ユーザーを自分から他の誰かに変更したため、同じ問題が発生しました。
su
何らかの理由で、通常のコンパイルを実行した後、実行できませんでした(同じエラーメッセージ)。他のユーザーアカウントに直接sshが機能します。
GLIBCXX_3.4.14でのバグGCCの新しいバージョンをインストールする必要があります。 http://pkgs.org/download/libstdc++.so.6 goto:
http://geeksterminal.com/how-to-install-glib-glibc/1392/
そして指示に従います。
Gccコンパイラの複数のバージョンがインストールされていて、デフォルトのインストールよりも新しいバージョンを使用する必要がありました。私はLinuxシステムのシステム管理者ではないので、/ usr/libまたは上記の他の提案の多くを変更することはできません。私はこの問題に遭遇していましたが、最終的には64ビットライブラリ(lib64)ディレクトリではなく32ビットライブラリディレクトリへのパスを設定するまで追跡しました。 32ビットディレクトリ内のライブラリには互換性がないため、システムはデフォルトで古いバージョンになりました。
参照しているパスに-Lを使用すると、「-lstdc ++を検索するときに互換性のないlibstdc ++。soをスキップする」という警告が表示されました。これが最終的に問題を解決するのに役立つヒントでした。