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