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이는 실제로 두 번째 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시]

알았어, 내가 알아냈을 수도 있어. 소스에서 모든 종속성을 구축하기 위해 동일한 컴파일러를 사용하는 대신 환경/셸 설정과 관련이 있기를 바랐는데 우연히 하나를 발견했습니다.오래된 게시물그중 "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.10되는 AWS 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.hpp.Artem이 여기서 제안한 것처럼:

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내 시스템에서는 먼저 이전 항목을 삭제 해야 하지만 yum하나는 삭제해야 합니다.묶음다른 종속성에도 마찬가지입니다. 이 두 가지 지침을 실행함으로써 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 설치에 문제가 있는 사람들에게 도움이 되기를 바랍니다.

관련 정보