CentOS 无法识别已编译的 boost 库

CentOS 无法识别已编译的 boost 库

我使用以下步骤构建并安装了 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

然后,我尝试构建使用 boost 的 mapnik。我结账马普尼克并运行./bootstrap.sh./configure。我收到错误“找不到 boost 文件系统所需的标头或共享库”。配置的boost部分如下:

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

(构建步骤由 庆三

为什么系统找不到boost库1.67?我不记得安装过 boost 1.63。我已经编译并安装了1.67,但构建系统不使用它。系统在哪里寻找系统的提升?我删除了/usr/local/lib和/usr/lib64中的所有libboost_*文件,但仍然不知道系统在哪里寻找boost。有人可以提供有关如何告诉系统新编译的软件的提示吗?

答案1

Cent OS 7 用户在这里,也尝试让 Mapnik 使用可选依赖项进行构建,但是我的确实(似乎)识别了我更新的 Boost 构建。您可能已经克服了这个问题,回避了它,或者忘记了它,但我还是提到这一点,以防它对您或其他人有帮助。

从我读到的内容来看,这几乎就像 Mapnik 希望/需要使用相同的编译器构建依赖项,以便在 make/install 步骤期间识别这些依赖项。但是,如果您使用此方法,它实际上会创建一个替代的非默认编译器,您必须在 shell 会话中指定该编译器才能使用它来代替默认编译器。

我使用这种方法来更新我的编译器,构建 Boost,然后配置 Mapnik。所以它可能对你有用。

重要的。特别注意第二步中出现的export CC=和说明。export CXX=因为这是您覆盖默认编译器的地方,并且似乎大多数/所有依赖项都需要使用此编译器构建。

首先,从 gcc6 系列获取更新的 gcc/g++ 编译器,并支持 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

接下来,从源代码构建并安装 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=和说明,以确保 Mapnik 使用与构建 Boost 相同的编译器进行构建!export CXX=

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

希望这对某人有帮助!

相关内容