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