
Eu construí e instalei o boost usando as seguintes etapas:
# 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
Então, tento construir o mapnik que usa boost. Eu finalizo a compramapnike correr ./bootstrap.sh
e ./configure
. Recebo o erro "Não foi possível encontrar o cabeçalho necessário ou a biblioteca compartilhada para aumentar o sistema de arquivos". A seção boost do configure é a seguinte:
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('_')]
(Etapas de construção cortesia de keisan)
Por que o sistema não encontra a biblioteca boost 1.67? Não me lembro de instalar o boost 1.63. Compilei e instalei o 1.67, mas o sistema de compilação não o utiliza. Onde o sistema procura impulso no sistema? Excluí todos os arquivos libboost_* em /usr/local/lib e /usr/lib64, mas ainda não sei onde o sistema procura por impulso. Alguém pode dar uma dica sobre como informar ao sistema sobre o software recém-compilado?
Responder1
Usuário Cent OS 7 aqui, também tentando fazer com que o Mapnik construa com dependências opcionais, no entanto, o meu (parece) reconhecer minha compilação Boost atualizada. Você provavelmente já superou esse problema, contornou-o ou esqueceu-se dele, mas menciono isso de qualquer maneira, caso possa ajudar você ou outra pessoa.
Pelo que estou lendo, é quase como se o Mapnik quisesse/precisasse que dependências fossem construídas usando o mesmo compilador para reconhecer essas dependências durante as etapas de criação/instalação. No entanto, se você usar essa abordagem, ela criará um compilador alternativo e não padrão, que você deverá especificar em sua sessão de shell para usar no lugar do compilador padrão.
Usei essa abordagem para atualizar meu compilador, construir o Boost e configurar o Mapnik. Então pode funcionar para você.
Importante. Observe especificamente as instruções
export CC=
eexport CXX=
que aparecem na segunda etapa. Como é aqui que você substitui seu compilador padrão, parece que a maioria/todas as dependências precisam ser construídas com este compilador.
Primeiro, obtenha um compilador gcc/g++ atualizado da série gcc6 com suporte a c++14:
## 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
Em seguida, crie e instale o Boost a partir do código-fonte. Esta abordagem pode resultar em uma segunda instalação do Boost. Mas você precisa saber onde ele chega para especificá-lo durante a etapa de configuração do 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
Agora o Boost está instalado e mora aqui:/opt/boost/
Neste ponto, ao construir e instalar o Mapnik, você pode especificar sua versão atualizada do Boost na etapa de configuração, como abaixo.
Isso é importante-Se você reinicializou ou se efetuou logout e login novamente, será necessário repetir as instruções export CC=
e export CXX=
que aparecem no início da segunda etapa para garantir que o Mapnik seja compilado com o mesmo compilador usado para compilar o Boost!
./configure BOOST_LIBS=/opt/boost/lib BOOST_INCLUDES=/opt/boost/includes
Espero que isso ajude alguém!