CentOSはコンパイルされたブーストライブラリを認識できません。

CentOSはコンパイルされたブーストライブラリを認識できません。

次の手順でBoostを構築してインストールしました。

# Boostrap and install
JOBS=`grep -c ^processor /proc/cpuinfo`
wget https://dl.bintray.com/boostorg/release/1.67.0/source/boost_1_67_0.tar.bz2
tar xf boost_1_67_0.tar.bz2
cd boost_1_63_0
./bootstrap.sh
./b2 -d1 -j${JOBS} --with-thread --with-filesystem --with-python --with-regex -sHAVE_ICU=1 --with-program_options --with-system link=shared release toolset=gcc stage
./b2 -d1 -j${JOBS} --with-thread --with-filesystem --with-python --with-regex -sHAVE_ICU=1 --with-program_options --with-system link=shared release toolset=gcc install
sudo bash -c "echo '/usr/local/lib' > /etc/ld.so.conf.d/boost.conf"
sudo ldconfig

それからブーストを使ってmapnikを構築してみました。私はチェックアウトしますマップニック実行し./bootstrap.sh./configure。 「ブーストファイルシステムに必要なヘッダーまたは共有ライブラリが見つかりません」というエラーが発生します。構成のブースト部分は次のとおりです。

Searching for boost libs and headers... (cached) 
Found boost libs: mason_packages/.link/lib
Found boost headers: mason_packages/.link/include
Checking for C++ header file boost/version.hpp... yes
Checking for Boost version >= 1.61... yes
Found boost lib version... 
Checking for C++ library boost_system... no
Could not find required header or shared library for boost system
Checking for C++ library boost_filesystem... no
Could not find required header or shared library for boost filesystem
Checking for C++ library boost_regex... yes
Checking for C++ library boost_program_options... yes
ValueError: invalid literal for int() with base 10: '':
  File "/root/src/mapnik/SConstruct", line 1600:
    boost_version = [int(x) for x in env.get('BOOST_LIB_VERSION_FROM_HEADER').split('_')]

(ビルドステップは次のように提供されます。 京城)

システムがブーストライブラリ1.67を見つけることができないのはなぜですか?ブースト1.63をインストールした記憶はありません。 1.67をコンパイルしてインストールしましたが、ビルドシステムではそれを使用しません。システムはどこでシステム改善を探しますか? /usr/local/libおよび/usr/lib64からすべてのlibboost_*ファイルを削除しましたが、システムがブーストを探している場所はまだわかりません。新しくコンパイルされたソフトウェアについてシステムに通知する方法についてのヒントを提供できる人はいますか?

答え1

ここでは、Cent OS 7ユーザーもオプションの依存関係を使用してMapnikをビルドしようとしましたが、私の最新のBoostビルドを認識したようです。あなたはこれを克服したり、避けたり、忘れたりしたかもしれませんが、とにかくあなたや他の人に役立つことができるように言及します。

私が読んだところ、Mapnikは、make / installフェーズで依存関係を認識するために同じコンパイラで依存関係を構築する必要があるのとほぼ同じです。ただし、この方法では、デフォルトのコンパイラの代わりに使用するためにシェルセッションで指定する必要があるデフォルト以外の代替コンパイラが作成されます。

私はこの方法を使用してコンパイラを更新し、BoostをビルドしてからMapnikを設定します。だからそれはあなたに効果があるかもしれません。

重要。ステップ2に表示され、指示に特別な注意を払ってくださいexport CC=export CXX=これがデフォルトのコンパイラをオーバーライドする場所なので、ほとんど/すべての依存関係をこのコンパイラでビルドする必要があるようです。

まず、c++14 をサポートする gcc6 シリーズの更新された gcc/g++ コンパイラをインポートします。

## Instructions modified from here, I just changed the gcc version.. 
## https://linuxhostsupport.com/blog/how-to-install-gcc-on-centos-7/
## 
cd /root/downloads
screen -U -S gcc
wget http://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-6.5.0/gcc-6.5.0.tar.gz
tar zxf gcc-6.5.0.tar.gz
cd gcc-6.5.0
## Install bzip2 if you don't have it yet..
yum install bzip2
## Install gcc prereqs..
./contrib/download_prerequisites
./configure --disable-multilib --enable-languages=c,c++
make -j 4
make install

次に、ソースからBoostをビルドしてインストールします。この方法では、Boostを再インストールできます。ただし、Mapnikの構成段階でこれを指定するには、その場所を知る必要があります。

## Create temporary links to the new gcc/g++ compiler resources.
## These disappear with your shell session but need to be in effect for both the Boost and Mapnik builds.
## 
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++

cd /root/downloads
wget https://dl.bintray.com/boostorg/release/1.69.0/source/boost_1_69_0.tar.gz
tar -xzf boost_1_*
cd boost_1_*
## This prefix variable sets the install location for boost, knowing this location is important. 
## This was the location suggested by the instructions I followed, which I've lost, but this seems to be a standard alternative location.
./bootstrap.sh --prefix=/opt/boost
./b2 install --prefix=/opt/boost --with=all

Boostがインストールされており、場所は次のとおりです。/opt/boost/

この時点で、Mapnikをビルドしてインストールするときは、次のように構成段階で最新のBoostバージョンを指定できます。

これは非常に重要です -export CC=再起動またはログアウトして再度ログインした場合は、手順2の上部に表示され、指示を繰り返して、Boostがビルドされたのと同じコンパイラでMapnikがビルドされていることを確認する必要があります。export CXX=

./configure BOOST_LIBS=/opt/boost/lib BOOST_INCLUDES=/opt/boost/includes

これが誰かに役立つことを願っています!

関連情報