CentOS no reconoce la biblioteca boost compilada

CentOS no reconoce la biblioteca boost compilada

He creado e instalado boost siguiendo los siguientes pasos:

# 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

Luego, intento construir mapnik que usa boost. pagomapaniky corre ./bootstrap.shy ./configure. Recibo el error "No se pudo encontrar el encabezado requerido o la biblioteca compartida para impulsar el sistema de archivos". La sección de impulso de configuración es la siguiente:

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('_')]

(Construya pasos cortesía de keisan)

¿Por qué el sistema no encuentra la biblioteca boost 1.67? No recuerdo haber instalado boost 1.63. Compilé e instalé 1.67, pero el sistema de compilación no lo usa. ¿Dónde busca el sistema el impulso del sistema? Eliminé todos los archivos libboost_* en /usr/local/lib y /usr/lib64, pero todavía no sé dónde busca el sistema el impulso. ¿Alguien puede dar un consejo sobre cómo informar al sistema sobre el software recién compilado?

Respuesta1

Usuario de Cent OS 7 aquí, también intentando que Mapnik cree con dependencias opcionales, sin embargo, el mío (parece) reconocer mi compilación Boost actualizada. Probablemente ya hayas superado este problema, lo hayas evitado o lo hayas olvidado, pero lo menciono de todos modos en caso de que pueda ayudarte a ti o a alguien más.

Por lo que estoy leyendo, es casi como si Mapnik quisiera/necesitara que las dependencias se crearan utilizando el mismo compilador para poder reconocer esas dependencias durante los pasos de creación/instalación. Sin embargo, si utiliza este enfoque, en realidad crea un compilador alternativo, no predeterminado, que debe especificar en su sesión de shell para poder usarlo en lugar del compilador predeterminado.

Utilicé este enfoque para actualizar mi compilador, compilar Boost y luego configurar Mapnik. Entonces podría funcionar para ti.

Importante. Tenga en cuenta específicamente las instrucciones export CC=y export CXX=que aparecen en el segundo paso. Como aquí es donde anula su compilador predeterminado, parece que la mayoría o todas las dependencias deben crearse con este compilador.

Primero, obtenga un compilador gcc/g++ actualizado de la serie gcc6 con soporte para 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

A continuación, compila e instala Boost desde el código fuente. Este enfoque puede resultar en una segunda instalación de Boost. Pero necesitas saber dónde aterriza para poder especificarlo durante el paso de configuración de 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

Ahora Boost está instalado y vive aquí:/opt/boost/

En este punto, al crear e instalar Mapnik, puede especificar su versión actualizada de Boost en el paso de configuración, como se muestra a continuación.

Esto es importante-Si reinició, o si cerró la sesión y volvió a iniciarla, debe repetir las instrucciones export CC=y export CXX=que aparecen en la parte superior del segundo paso para asegurarse de que Mapnik compila con el mismo compilador que utilizó para compilar Boost.

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

¡Ojalá esto ayude a alguien!

información relacionada