CentOS 7:Mapnikをビルドすると、構成フェーズでlibpng-develやlibjpeg-develなどのオプションの依存関係が見つかりません。

CentOS 7:Mapnikをビルドすると、構成フェーズでlibpng-develやlibjpeg-develなどのオプションの依存関係が見つかりません。

CentOS 7システムでMapnik(3.0.10)をビルド/インストールしようとしていますが、すべての依存関係を取得して識別するのに問題があります。

Mapnikが要求するc ++ 14サポートを保証するために、gcc6シリーズのgcc / g ++コンパイラをインストールしました。新しいバージョンを直接指してgccそのバージョンをポーリングすると、次のような結果が得られます。

[root@raven ~]# /usr/local/bin/gcc --version
gcc (GCC) 6.5.0
Copyright (C) 2017 Free Software Foundat/..snip..

次に、更新されたコンパイラが後続のビルドで使用されるように一時的に$CC環境変数をオーバーライドし、次のようにソースからBoost 1.69.0をインストールしました。$CXXこれは実際には2番目のBoostをインストールするため、この--prefixパラメータはこの代替Boostがインストールされる場所を決定します。

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_*
./bootstrap.sh --prefix=/opt/boost
./b2 install --prefix=/opt/boost --with=all

今確認してみると、/opt/boost私が期待しているものが何であるかがわかります。

[root@raven ~]# dir /opt/boost/
include  lib

ついにMapnik自体のインストールを始めました。私は基本的に使用しています。ここで言及された方法。ただし、以前のGDALとPostGISのインストールにより、すでにいくつかの依存関係がありました。しかし、Mapnikのステップを実行すると、オプションの依存関係.configureが見つかりません。

たとえば、私はprojソースからビルドし、それがどこにあるかを正確に知っています。

[root@raven ~]# dir /usr/proj49/
bin  include  lib  share

そしてldconfig発見したのも…

[root@raven mapnik-v3.0.10]# ldconfig -p | grep libproj
        libproj.so.12 (libc6,x86-64) => /usr/proj49/lib/libproj.so.12
        libproj.so.0 (libc6,x86-64) => /lib64/libproj.so.0
        libproj.so (libc6,x86-64) => /usr/proj49/lib/libproj.so
        libproj.so (libc6,x86-64) => /lib64/libproj.so

だから私はパラメータと一緒に代替Boostの場所を指定しましたがPROJ_LIBS...それでも見つかりませんか?以下はいくつかの要約出力です。指定されたとおりにBoostを見つけましたが、構成パラメーターにもかかわらず見つかりませんでした。PROJ_INCLUDES.configureprojproj

[root@raven ~]# cd /root/downloads/mapnik-v3.0.10
[root@raven mapnik-v3.0.10]# ./configure BOOST_LIBS=/opt/boost/lib BOOST_INCLUDES=/opt/boost/includes PROJ_LIBS=/usr/proj49/lib PROJ_INCLUDES=/usr/proj49/include
..snip..
Searching for boost libs and headers... (cached)
Found boost libs: /opt/boost/lib
Found boost headers: /opt/boost/include
Checking for C++ header file boost/version.hpp... yes
Checking for Boost version >= 1.47... yes
Found boost lib version... 1_69
..snip..
Checking for C library proj... no
Could not find optional header or shared library for proj
..snip..

ほとんどのオプションの依存関係libpng-devel(、、libjpeg-develsqlite3、tiff stuff、projなど)は同様に無視されるようです。これらのほとんどはソースビルドではなくパッケージのインストールです。

私たちはかなり長い間このサーバーを使用しているので、最新のMapnikと完全なサポート(特にproj、png、jpegについて)が欲しいです。特に迷惑なのは、projインストール場所を正確に知り、Mapnikに対応するパラメータを提供したため、バインディングがないことです。

長く読んで申し訳ありません。もし私が逃した部分をご存知の方はいらっしゃいますか?

[修正する: 4.24.19 午後5時]

わかりました、私が見つけたかもしれません。ソースからすべての依存関係を構築するために同じコンパイラを使用するのではなく、環境/シェル設定に関連していることを望みましたが、偶然に1つを見つけました。古い投稿そのうち「Dom Lehr」はLD_LIBRARY_PATH/usr/local/libただし、楽観的に異なる場所を含むようにパラメータ値を拡張し、識別されたすべての依存関係を.configure使用して手順を完了できるようになりました。これは私がしたことです...

vi /etc/profile.d/sh.local
# Add colon-separated paths to the LD_LIBRARY_PATH variable like this..
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/lib64:/usr/lib:/usr/lib64:

関連性があると思われる.soファイルを見つけたところで考えられるものをすべて追加しました。ファイルを保存して...

/sbin/ldconfig
ldconfig

その後、端末セッションを終了し、再度ログインしてシェルを更新しました。その後、機能していることをもう一度確認してください。

[root@raven mapnik-v3.0.10]# echo $LD_LIBRARY_PATH
/opt/remi/php70/root/usr/lib64::/usr/local/lib:/usr/local/lib64:/usr/lib:/usr/lib64:

それをしました。そのため、一時コンパイラパラメータを更新してMapnikソースフォルダに移動して指示を再実行しましたが、.configure問題なくうまく機能しました。

export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
cd /root/downloads/mapnik-v3.0.10
./configure BOOST_LIBS=/opt/boost/lib BOOST_INCLUDES=/opt/boost/includes

効果がありました。今成功したかどうかはまだ謎ですが、成功したようです!

まあ、本当に早く到着しました。今はmake失敗しました..

<mapnik::geometry::geometry_collection<double> > >&&’
scons: *** [src/json/mapnik_json_geometry_grammar.o] Error 1
scons: building terminated because of errors.
make: *** [src/json/libmapnik-json.a] Error 2

....これは、人々が一致しないコンパイラ/依存関係の問題を経験した他の多くの投稿と一致します。図面ボードに戻ります。

答え1

数回の出発と新しいスタートの最後に、ついに仕事を始めました。しかし、最終的にそれらがすべて必要だったのか、それとも船を正常に戻す特別な調整があったのかわかりません。

解決策があればそうです。可能Mapnikホームページから最新の安定版として参照され、githubから直接ダウンロードされるmapnik-v3.0.10AWS S3からダウンロードしたビルドから切り替えました。mapnik-v3.0.22

とにかく最初から最後まで私に役立つものは次のとおりです。

代替 gcc/g++ コンパイラの追加

c++14 サポートを保証するために、代替ディレクトリに gcc/g++ コンパイラの gcc6 ファミリをインストールしました。から直接引用する必要があります/usr/local/bin

yum -y install bzip2
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
./contrib/download_prerequisites
./configure --disable-multilib --enable-languages=c,c++
make -j 4
make install

スタンバイブーストの除去と再構築

/opt/boost以前のビルドから私のディレクトリを削除し、示されているように別のコンパイラフラグを使用してBoostを再構築しました。このスクリプト。上記のgcc / g ++と同様に、このBoostは引数を使用するたびにシステムのデフォルトとしてインストールされます--prefix(私の場合は/opt/boost

cd /opt
rm -rf boost
cd /root/downloads
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
JOBS=`grep -c ^processor /proc/cpuinfo`
./bootstrap.sh --prefix=/opt/boost
./b2 --prefix=/opt/boost -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 --prefix=/opt/boost -j${JOBS} --with-thread --with-filesystem --with-python --with-regex -sHAVE_ICU=1 --with-program_options --with-system toolset=gcc link=shared release install

Boostインクルードファイルの奇妙な調整

Boost> = 1.64に関連する奇妙なコンパイル「gotcha!」のため、Boostインクルードパスのファイルが少し修正されましたmatrix_transformers.hppArtemがここで提案したように:

vi /opt/boost/include/boost/geometry/strategies/transform/matrix_transformers.hpp

i挿入モードを切り替えます。

## Change the order of these three lines, near the top of the file..
## ..snip..
#include <cstddef>

#include <boost/qvm/mat_operations.hpp>    <-- This one has to be moved from the bottom of this group, to the top.
#include <boost/qvm/mat.hpp>
#include <boost/qvm/mat_access.hpp>
## ..snip..

ESC:x!変更を保存します。


[2019年6月18日更新]しばらくして、依存関係の不一致が発生しました。解決策は、libpngソースからビルドし、私のMapnik設定スクリプトを新しいlibpng

libpng私のシステムでは、最初に古いエントリを削除する必要がありますが、yum1つは削除する必要があります。バンドル他の依存関係にも同様です。これら2つのガイドラインを実行することで、他の依存関係の削除のみをlibpng削除して回避できました。

警告:パッケージマネージャとの作業は危険です!

rpm -e --nodeps libpng
rpm -e --nodeps libpng-devel

ソースからlibpngをビルドする

cd /root/downloads
mkdir libpng1616-src
cd libpng1616-src
wget http://downloads.sourceforge.net/libpng/libpng-1.6.16.tar.xz
tar -xf libpng-1.6.16.tar.xz
cd libpng-1.6.16
./configure --prefix=/usr --disable-static &&
make
make check
make install &&
mkdir -v /usr/share/doc/libpng-1.6.16 &&
cp -v README libpng-manual.txt /usr/share/doc/libpng-1.6.16

実行して存在することを確認できます。 libpng-config --version


シェル環境の回復

Mapnikのインストールを続行する前に、システム環境でいくつかの設定を行う必要があります。


ローカルライブラリパスを設定します。

cd /etc/ld.so.conf.d/
touch root-local-lib-path.conf
vi /etc/ld.so.conf.d/root-local-lib-path.conf

i挿入モードを切り替えます。

## Add this line:
/usr/local/lib

ESC:x!変更を保存します。


設定LD_LIBRARY_PATH。これがこの変数を設定する最も適切な方法であるかどうかはわかりませんが、これが私がしたことです。

vi /etc/profile.d/sh.local

i挿入モードを切り替えます。

## Add these lines, or the equivalent for your system customizations:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/lib64:/usr/lib:/usr/lib64:

## Update 6.18.2019: I later added these two environment vars.
## If you haven't already installed gdal or proj4 (below) it would be better to install them first, then return to this file and add them later.
## Finally make sure these paths are correct for your installation!
export GDAL_DATA=/usr/share/gdal
export PROJ_LIB=/usr/share/proj

ESC:x!変更を保存します。


代替 Boost の場所を環境に追加します。これがデフォルトのBoostインストールとあいまいな衝突を引き起こす可能性があると思いますが、私の場合はうまくいくようです。 Mapnik設定にBoost libs / includeを指定したので、これは必要ないかもしれません。

cd /etc/ld.so.conf.d
touch boost-1.69.0-libs.conf
vi /etc/ld.so.conf.d/boost-1.69.0-libs.conf

i挿入モードを切り替えます。

/opt/boost/lib

ESC:x!変更を保存します。

ldconfig

さまざまなMapnik依存関係をインストールし、ソースからMapnikをビルドします。

注:今、次のインストールコマンドを抽出しました。上記のリンクスクリプト。ところがharfbuzz-devel抜けたようで追加しました。ただし、GDALやPostGRESql / PostGISなどの機能がすでにインストールされている場合は、おそらくそれらのいくつかがすでにインストールされています。したがって、リストを慎重に確認し、環境と一致しないものをすべて削除してください。

# You might need epel packages for some of these dependencies..
yum install epel-release

# Primary dependencies..
yum -y install make gcc47 gcc-c++ bzip2-devel harfbuzz-devel libpng-devel libtiff-devel zlib-devel libjpeg-devel libxml2-devel python-setuptools git-all python-nose python-devel python proj-devel proj proj-epsg proj-nad freetype-devel freetype libicu-devel libicu git bzip2

# Optional dependencies..
yum -y install gdal-devel gdal postgresql-devel sqlite-devel sqlite libcurl-devel libcurl cairo-devel cairo pycairo-devel pycairo postgresql93 postgresql93-server postgresql93-libs postgresql93-contrib postgresql93-devel postgis2_93 vim

# Ensure the alternate, updated gcc/g++ compiler is still referenced in the environment!
export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++

# Get the source and install Mapnik
cd /root/downloads
wget https://github.com/mapnik/mapnik/releases/download/v3.0.22/mapnik-v3.0.22.tar.bz2
tar -xf ./mapnik-v3.0.22.tar.bz2
cd mapnik-v3.0.22
# Update 6.18.2019: Per the libpng issue I had I eventually rebuilt Mapnik using more configuration parameters, specifically assignments for PROJ, GDAL, as well as PNG.
./configure BOOST_LIBS=/opt/boost/lib BOOST_INCLUDES=/opt/boost/includes PROJ_LIB=/usr/proj49/lib PROJ_INCLUDES=/usr/proj49/include GDAL_LIBS=/usr/lib64 GDAL_INCLUDES=/usr/include/gdal PNG_LIBS=/usr/lib PNG_INCLUDES=/usr/include/libpng16
make
make test ## Mine had a few errors, but I ignored them.. :/
make install

# And install python bindings if you want
yum install python-pip
yum install python-wheel
pip install mapnik

インストールをテストするには、cdMapnikソースコードのデモディレクトリに移動して、C ++および/またはPythonの例を確認してください。READMEテストする前にC ++デモをビルドする必要があると思いますので、このフォルダ内のファイルに注意してください。しかし、Pythonを非常に簡単に使用できます。

python rundemo.py

..一部のイメージはそのディレクトリにレンダリングする必要があります。

別の問題。以前にMapnikをインストールしたことがある場合は、Pythonのデモ画像に機能ラベルがあることに気づきました!システムの問題ではなく、実際にはMapnik 3 Pythonバインディングは現在サポートされていません。。ただし、XML形式のスタイル宣言は問題なく機能するため、外部スタイルシート(TileStacheなど)を使用する限り影響を受けません。ただし、ユースケースにPythonバインディングが必要な場合は、カスタムディレクトリにMapnik 3と一緒にMapnik 2をインストールすることをお勧めします。

この時点で、多くのインターネット検索とスレッドの読み取り、さまざまな試みの終わりにインストールが正常に動作しているようです。したがって、このナビゲーションがCent OSのインストールに問題がある人に役立つことを願っています。

関連情報