
Ich habe Boost mit den folgenden Schritten erstellt und installiert:
# 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
Dann versuche ich, Mapnik zu bauen, das Boost verwendet. Ich checkekartenweltund führe ./bootstrap.sh
und aus ./configure
. Ich erhalte die Fehlermeldung „Erforderlicher Header oder gemeinsam genutzte Bibliothek für Boost-Dateisystem konnte nicht gefunden werden“. Der Boost-Abschnitt von configure lautet wie folgt:
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('_')]
(Bauschritte mit freundlicher Genehmigung von keisan)
Warum findet das System die Boost-Bibliothek 1.67 nicht? Ich kann mich nicht daran erinnern, Boost 1.63 installiert zu haben. Ich habe 1.67 kompiliert und installiert, aber das Build-System verwendet es nicht. Wo sucht das System im System nach Boost? Ich habe alle libboost_*-Dateien in /usr/local/lib und /usr/lib64 gelöscht, weiß aber immer noch nicht, wo das System nach Boost sucht. Kann mir jemand einen Tipp geben, wie ich das System auf die neu kompilierte Software aufmerksam machen kann?
Antwort1
Cent OS 7-Benutzer hier, der ebenfalls versucht, Mapnik mit optionalen Abhängigkeiten zu erstellen, aber meines erkennt (scheint) meine aktualisierte Boost-Version. Sie haben dieses Problem wahrscheinlich bereits überwunden, umgangen oder vergessen, aber ich erwähne es trotzdem, falls es Ihnen oder jemand anderem helfen könnte.
Soweit ich das verstehe, ist es fast so, als ob Mapnik Abhängigkeiten mit demselben Compiler erstellen möchte/muss, um diese Abhängigkeiten während der Schritte „Erstellen“ und „Installieren“ zu erkennen. Wenn Sie jedoch diesen Ansatz verwenden, wird tatsächlich ein alternativer, nicht standardmäßiger Compiler erstellt, den Sie in Ihrer Shell-Sitzung angeben müssen, um ihn anstelle des Standard-Compilers zu verwenden.
Ich habe diesen Ansatz verwendet, um meinen Compiler zu aktualisieren, Boost zu erstellen und dann Mapnik zu konfigurieren. Es könnte also für Sie funktionieren.
Wichtig. Beachten Sie insbesondere die
export CC=
Anweisungenexport CXX=
im zweiten Schritt. Denn hier überschreiben Sie Ihren Standardcompiler und es scheint, dass die meisten/alle Abhängigkeiten mit diesem Compiler erstellt werden müssen.
Besorgen Sie sich zunächst einen aktualisierten gcc/g++-Compiler aus der gcc6-Reihe mit C++14-Unterstützung:
## 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
Als nächstes erstellen und installieren Sie Boost aus dem Quellcode. Dieser Ansatz kann zu einer zweiten Installation von Boost führen. Sie müssen jedoch wissen, wo es landet, um es während des Konfigurationsschritts von Mapnik anzugeben:
## 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
Jetzt ist Boost installiert und befindet sich hier:/opt/boost/
An diesem Punkt können Sie beim Erstellen und Installieren von Mapnik Ihre aktualisierte Boost-Version im Konfigurationsschritt wie unten angeben.
Das ist wichtig-Wenn Sie einen Neustart durchgeführt oder sich abgemeldet und wieder angemeldet haben, müssen Sie die oben im zweiten Schritt angezeigten Anweisungen export CC=
und wiederholen, um sicherzustellen, dass Mapnik mit demselben Compiler erstellt wird, den Sie zum Erstellen von Boost! verwendet haben.export CXX=
./configure BOOST_LIBS=/opt/boost/lib BOOST_INCLUDES=/opt/boost/includes
Hoffentlich hilft das jemandem!