CentOS não reconhece biblioteca boost compilada

CentOS não reconhece biblioteca boost compilada

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.she ./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=e export 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!

informação relacionada