web-dev-qa-db-ja.com

使用するlibstdc ++。so.6の指定方法

私は、_C++11_機能と、ターゲットマシンにインストールされているものより新しいバージョンのboostが必要な私のプログラムをコンパイルしようとしています。したがって、すべての依存関係とbinutilsのツリー内ビルドを使用して、_gcc 4.9_をいくつかのローカルディレクトリ(_/secured/local_)にコンパイルしてインストールしました。その後、_boost 1.55_をダウンロードして_./boostrap.sh --prefix=/secured/local && ./b4 install_を実行し、Boostをインストールしました。どちらのコンパイルも正常に機能し、_gcc -std=c++11_も機能します。

私のプログラムは、ファイルを検索する通常の_FindXX.cmake_手順でcmakeを使用して構築されています。私はこのようにcmakeを実行しています:

_cmake ../source/ -DBOOST_ROOT=/secured/local -DCMAKE_EXE_LINKER_FLAGS='-Wl,-rpath,/secured/local/lib'
_

新しいブーストインストールと新しいバージョンのgccが見つかりました。コンパイルとリンクはどちらも問題なく動作します。ただし、プログラムを実行すると、次のエラーが発生します。

_$ ./surface
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.19' not found (required by ./surface)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /secured/local/lib/libconfig++.so.9)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /secured/local/lib/libboost_program_options.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /secured/local/lib/libboost_program_options.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /secured/local/lib/libboost_program_options.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /secured/local/lib/libboost_filesystem.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
./surface: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.15' not found (required by /secured/local/lib/libboost_regex.so.1.55.0)
_

ブーストショーでobjdumpを実行する

_objdump -x /secured/local/lib/libboost_program_options.so.1.55.0 | grep stdc++
  NEEDED               libstdc++.so.6
  required from libstdc++.so.6:
_

両方のブーストライブラリが古い_/usr/lib64/libstdc++.so.6_を_/secured/local/lib_の新しいものではなく使用しようとしているように見えます。手順で何を間違えたのですか?

どこかに_LD_LIBRARY_PATH_を設定しないようにしています。

5
janoliver

gccをインストールすると、libstdc++.so.6両方に$PREXIF/libおよび$PREFIX/lib64。後者をブーストのRPATHとして使用すると、私のプログラムで問題が解決しました。前者のみを使用すると、システムにフォールバックしますlibstdc++.so.6

10
janoliver