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

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

C++11機能が必要で、ターゲットコンピュータにインストールされているよりも最新のバージョンが必要なプログラムをコンパイルしようとしています。そのため、boostすべての依存関係とbinutilsのツリー内ビルドを使用して、gcc 4.9いくつかのローカルディレクトリ()にコンパイルしてインストールしました。/secured/localその後、Install Boostをダウンロードしてboost 1.55実行しました./boostrap.sh --prefix=/secured/local && ./b4 install。両方のコンパイルはうまく動作し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

答え1

インストールは合計に入れますgcclibstdc++.so.6後者をブーストとして使用して、私のプログラムは問題を解決しました。前者のみを使用すると、システムがロールバックされます。$PREXIF/lib$PREFIX/lib64RPATHlibstdc++.so.6

関連情報