环境准备
Yukon 1.0.1 + PostgreSQL 13.5
Centos : 7.8
编译器: GCC 7.4.0
CMake: 3.19
python:v3
安装依赖
GCC
参考gcc升级,建议7.4及以上
cmake
-
安装依赖
yum install -y gcc gcc-c++ wget make automake openssl openssl-devel
-
下载源码
wget https://cmake.org/files/v3.19/cmake-3.19.0.tar.gz
-
解压安装包
tar -xf cmake-3.19.0.tar.gz
-
编译,安装
./bootstrap --prefix=/usr/local/cmake-3.10.0 make -j4 && make instal
-
环境变量
vi /etc/profile export PATH=/usr/local/cmake-3.19.0/bin:$PATH source /etc/profile
出现/lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found,说明gcc的动态库还是旧版本的
a) 查找编译gcc最新的动态链接库,find / -name "libstdc++.so*"
/usr/src/gcc-7.4.0/build/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.24
b) 拷贝到/usr/lib64下,移除旧版本的动态链接库
c) 删除原来软连接: rm -rf /lib64/libstdc++.so.6
d) 软连接指向最新动态库(看自己的文件名):ln -s libstdc++.so.6.0.24 libstdc++.so.6
然后再次执行第4步
SQLite3
-
下载源码
wget https://www.sqlite.org/2022/sqlite-autoconf-3390400.tar.gz
-
解压软件包
tar -xf sqlite-autoconf-3390400.tar.gz
-
修改源代码
在后续编译 GDAL 时,会使用到 SQLite3 的一些特性,所以这里我们需要修改一下源代码,进入 sqlite3 目录,在
sqlite3.c
文件的第 25 行添加#define SQLITE_ENABLE_COLUMN_METADATA 1
,或者直接使用下面的命令修改sed -i '25 i #define SQLITE_ENABLE_COLUMN_METADATA 1' sqlite3.c
-
检查环境,生成编译脚本
./configure --prefix=/home/3rd_inst/sqlite3
-
编译,安装
make -j4 && make install
编译完成后就可以在
/home/3rd_inst/sqlite3
看到编译好的 SQLite3.
PROJ
-
下载源码
wget http://download.osgeo.org/proj/proj-8.1.1.tar.gz
-
解压软件包
tar -xf proj-8.1.1.tar.gz
-
导出环境变量
Porj 编译需要使用 SQLite3 3.11 以上版本,因此这里我们使用我们刚刚编译的 SQLite3,首先将其 pkg-config 文件路径导出:
export PKG_CONFIG_PATH=/home/3rd_inst/sqlite3/lib/pkgconfig:$PKG_CONFIG_PATH
同时使用我们编译好的
sqlite3
程序:export PATH=/home/3rd_inst/sqlite3/bin/:$PATH
-
检查环境,生成编译脚本
./configure --prefix=/home/3rd_inst/proj
-
编译,安装
make -j4 && make install
编译完成后就可以在
/home/3rd_inst/proj
看到编译好的 Proj.
GEOS
-
下载源码
wget https://download.osgeo.org/geos/geos-3.10.4.tar.bz2
-
解压软件包
tar -xf geos-3.10.4.tar.bz2
-
检查环境,生成编译脚本
cmake -DCMAKE_INSTALL_PREFIX=/home/3rd_inst/geos .
-
编译,安装
make -j4 && make install
编译完成后就可以在
/home/3rd_inst/geos
看到编译好的 GEOS.
GDAL
-
下载源码
wget http://upload.osgeo.org/gdal/3.3.2/gdal-3.3.2.tar.gz
-
解压软件包
tar -xf gdal-3.3.2.tar.gz
-
导出环境变量
export LIBRARY_PATH=/home/3rd_inst/proj/lib/:$LIBRARY_PATH export CPATH=/home/3rd_inst/proj/include:$CPATH
-
检查环境,生成编译脚本
./configure --prefix=/home/3rd_inst/gdal
-
编译,安装
make -j4 && make install
编译完成后就可以在
/home/3rd_inst/gdal
看到编译好的 GDAL.
CGAL
-
下载源码
wget https://github.com/CGAL/cgal/archive/refs/tags/releases/CGAL-4.13.2.tar.gz
-
解压软件包
tar -xf CGAL-4.13.2.tar.gz
-
检查环境,生成编译脚本
cmake -DCMAKE_INSTALL_PREFIX=/home/3rd_inst/cgal -DCMAKE_BUILD_TYPE=Release
-
编译,安装
make -j4 && make install
编译完成后就可以在
/home/3rd_inst/cgal
看到编译好的 CGAL.
SFCGAL
-
下载源码
wget https://github.com/Oslandia/SFCGAL/archive/refs/tags/v1.3.8.tar.gz
-
解压软件包
tar -xf v1.3.8.tar.gz
-
检查环境,生成编译脚本
cmake -DCMAKE_INSTALL_PREFIX=/home/3rd_inst/sfcgal -DCMAKE_PREFIX_PATH=/home/3rd_inst/cgal/lib64/cmake/CGAL
-
编译,安装
make -j4 && make install
编译完成后就可以在
/home/3rd_inst/sfcgal
看到编译好的 SFCGAL.
JSON-C
-
下载源码
wget https://github.com/json-c/json-c/archive/refs/tags/json-c-0.15-20200726.tar.gz
-
解压软件包
tar -xf json-c-0.15-20200726.tar.gz
-
检查环境,生成编译脚本
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/home/3rd_inst/json-c
-
编译,安装
make -j4 && make install
编译完成后就可以在
/home/3rd_inst/json-c
看到编译好的 JSON-C.
LIBXML2
-
下载源码
wget https://github.com/GNOME/libxml2/archive/refs/tags/v2.9.12.tar.gz
-
解压软件包
tar -xf v2.9.12.tar.gz
-
检查环境,生成编译脚本
sh autogen.sh --prefix=/home/3rd_inst/libxml2
-
编译,安装
yum -y install python-devel make -j4 && make install
编译完成后就可以在
/home/3rd_inst/libxml2
看到编译好的 LIBXML2.
PROTOBUF-CPP
-
下载源码
wget https://github.com/protocolbuffers/protobuf/releases/download/v3.16.0/protobuf-cpp-3.16.0.tar.gz
-
解压软件包
tar -xf protobuf-cpp-3.16.0.tar.gz
-
检查环境,生成编译脚本
./configure --prefix=/home/3rd_inst/protobuf
-
编译,安装
make -j4 && make install
编译完成后就可以在
/home/3rd_inst/protobuf
看到编译好的 PROTOBUF-CPP.
PROTOBUF-C
-
下载源码
wget https://github.com/protobuf-c/protobuf-c/releases/download/v1.4.0/protobuf-c-1.4.0.tar.gz
-
解压软件包
tar -xf protobuf-c-1.4.0.tar.gz
-
导出环境变量
这里我们指明刚刚安装的 Protobuf-cpp 的 pkg-config 文件路径
export PKG_CONFIG_PATH=/home/3rd_inst/protobuf/lib/pkgconfig:$PKG_CONFIG_PATH
-
检查环境,生成编译脚本
./configure --prefix=/home/3rd_inst/protobuf-c
-
编译,安装
make -j4 && make install
编译完成后就可以在
/home/3rd_inst/protobuf-c
看到编译好的 PROTOBUF-C.
到此为止,所有的三方依赖库已经编译完成,这里我们新建一个 enable
文件,用于导出我们在后续会用到的环境变量
#!/bin/bash
PREFIX=/home/3rd_inst
export LIBRARY_PATH=${PREFIX}/sqlite3/lib:${PREFIX}/proj/lib:${PREFIX}/gdal/lib:${PREFIX}/protobuf/lib:${PREFIX}/protobuf-c/lib:${PREFIX}/libxml2/lib:${PREFIX}/geos/lib64:${PREFIX}/cgal/lib64:${PREFIX}/sfcgal/lib64:${PREFIX}/json-c/lib64:$LIBRARY_PATH
export LD_LIBRARY_PATH=${PREFIX}/sqlite3/lib:${PREFIX}/proj/lib:${PREFIX}/gdal/lib:${PREFIX}/protobuf/lib:${PREFIX}/protobuf-c/lib:${PREFIX}/libxml2/lib:${PREFIX}/geos/lib64:${PREFIX}/cgal/lib64:${PREFIX}/sfcgal/lib64:${PREFIX}/json-c/lib64:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=${PREFIX}/sqlite3/lib/pkgconfig:${PREFIX}/proj/lib/pkgconfig:${PREFIX}/geos/lib64/pkgconfig:${PREFIX}/gdal/lib/pkgconfig:${PREFIX}/sfcgal/lib64/pkgconfig:${PREFIX}/protobuf/lib/pkgconfig:${PREFIX}/protobuf-c/lib/pkgconfig:${PREFIX}/json-c/lib64/pkgconfig:${PREFIX}/libxml2/lib/pkgconfig:$PKG_CONFIG_PATH
export PATH=${PREFIX}/sqlite3/bin:${PREFIX}/proj/bin:${PREFIX}/geos/bin:${PREFIX}/gdal/bin:${PREFIX}/sfcgal/bin:${PREFIX}/protobuf/bin:${PREFIX}/protobuf-c/bin:${PREFIX}/libxml2/bin:$PATH
还有一个 ugc 的文件夹是 yukon_geomodel 的依赖文件,你可以从安装包中找到这个文件。然后将路径加入到``LD_LIBRARY_PATH`` 中。
Yukon for PostgreSQL 编译
-
下载源码
git clone https://gitee.com/isupermap/yukon4pgsql.git
-
生成 configure
sh autogen.sh
-
检查环境,生成编译脚本
./configure --without-topology
-
编译,安装
make -j4 && make install
到此,就可以在 PostgreSQL 中使用 Yukon 了。