
Я собрал и установил 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, который использует boost. Я проверяюмапники запустить ./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, но система сборки ее не использует. Где система ищет boost в системе? Я удалил все файлы libboost_* в /usr/local/lib и /usr/lib64, но все еще не знаю, где система ищет boost. Может кто-нибудь дать совет, как сообщить системе о недавно скомпилированном программном обеспечении?
решение1
Пользователь Cent OS 7 здесь, также пытаюсь заставить Mapnik собраться с дополнительными зависимостями, однако мой (кажется) распознает мою обновленную сборку Boost. Вы, вероятно, уже преодолели эту проблему, обошли ее или забыли о ней, но я все равно упоминаю об этом на случай, если это может помочь вам или кому-то еще.
Из того, что я читаю, получается, что Mapnik хочет/нуждается в том, чтобы зависимости были построены с использованием того же компилятора, чтобы распознавать эти зависимости во время шагов make/install. Однако, если вы используете этот подход, он фактически создает альтернативный, нестандартный компилятор, который вам нужно указать в сеансе оболочки, чтобы использовать вместо стандартного компилятора.
Я использовал этот подход для обновления своего компилятора, сборки Boost, а затем настройки Mapnik. Так что он может подойти и вам.
Важный. Обратите особое внимание на инструкции
export CC=
иexport CXX=
, появляющиеся на втором шаге. Так как здесь вы переопределяете свой компилятор по умолчанию, и, похоже, что большинство/все зависимости должны быть построены с помощью этого компилятора.
Сначала получите обновленный компилятор gcc/g++ из серии gcc6 с поддержкой 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=
, export CXX=
которые появляются в верхней части второго шага, чтобы гарантировать, что Mapnik будет собран с помощью того же компилятора, который вы использовали для сборки Boost!
./configure BOOST_LIBS=/opt/boost/lib BOOST_INCLUDES=/opt/boost/includes
Надеюсь, это кому-нибудь поможет!