centos7环境下编译适合Geoserver版本的gdal

具体如何应用参考geoserver网站,主要支持2.系列gdal,因此,我编译2.4.4版本,proj用4.9.2,到官网下载相应软件:

proj-4.9.2.tar.gz(https://download.osgeo.org/proj/proj-4.9.2.tar.gz)

gdal2.4.4.tar.gz(http://download.osgeo.org/gdal/2.4.4/gdal-2.4.4.tar.gz)

geoserver-2.22.0以及geoserver-2.22.0-gdal-plugin.zip(官网下载,可下载最新的)

swig编译gdal的java版本需要如下软件:

apache-ant-1.10.12-bin.tar.gzhttps://mirrors.tuna.tsinghua.edu.cn/apache/ant/binaries/apache-ant-1.10.12-bin.tar.gz

swig-4.1.1https://udomain.dl.sourceforge.net/project/swig/swig/swig-4.1.1/swig-4.1.1.tar.gz

gdal3.4.1编译方法类似,版本有要求,我成功了的是:

gdal3.4.1,proj6.3.1,sqlite3.36,其他一致

下载后存放于/usr/local/目录下,进行安装。

下载完成后,即可进行安装。

1、apache-ant

解压,路径为/usr/local/apache-ant-1.10.12,

设置环境变量profile,/etc/profile添加路径,如下图所示:

export PATH=/usr/local/apache-ant-1.10.12/bin:$PATH

设置完成后,通过source /etc/profile命令更新配置文件。

可以输入ant命令,查看是否成功。

2、swig安装(切换到swig-4.1.1.tar.gz所在目录)

解压,tar xvfz swig-4.1.1.tar.gz

cd ./swig-4.1.1

bash ./configure --without-pcre【即不需要安装pcre依赖】

make

make install

安装完成后,通过swig -version查看版本信息,

如果其他目录识别不了,将其路径加如环境变量中。

3、proj安装(切换到proj-4.9.2.tar.gz所在目录)

解压,

tar xvfz proj-4.9.2.tar.gz

cd ./proj-4.9.0

./configure --prefix=/usr/local/proj-4.9.2/build/

--prefix:为输出路径,我指定一个位置,根据需要设置,在后面编译gdal的时候--with-proj需要设置该路径。

make

sudo make install

如果提示sqlite不存在,需要首先编译sqlite,gda3.4.1需要sqlite3.36(有最小版本要求,记不清了,我用得3.36)。

./configure时提示sqlite版本不正确等sqlite原因时(编译proj6.3.1时出现过),按如下设置:

That installs the native libraries in /usr/local/lib/libproj*. Now we're ready for GDAL!

4、gdal编译

解压

tar xvfz gdal-2.4.4.tar.gz

cd ./gdal-2.4.4

./configure --with-java=/usr/local/gdal-2.4.4/jdk1.8.0_221 --with-jvm-lib=/usr/local/gdal-2.4.4/jdk1.8.0_221/jre/lib/amd64/server --with-jvm-lib-add-rpath=yes --with-sfcgal=no --with-kea=no --with-proj=/usr/local/proj-4.9.2/build/

make

make install

--with-java为java_home的路径;

--with-jvm-lib为java路径下对应路径

--with-sfcgal=no设置不编译sfcgal,否则需要安装cgal,很麻烦。

--with-kea=no 设置不编译kea库,GDAL可以通过libkea库读取、创建和更新KEA格式的文件(如果编译kea出错,就可以设置为no,根据实际情况)。

如果没有/usr/local/gdal-2.4.4/jdk1.8.0_221,请下载jdk-8u221-linux-x64.tar.gz到相应位置解压,我解压的是/usr/local/gdal-2.4.4/jdk1.8.0_221/,并配置./configure中的正确路径

5、gdal版本java编译

首先编辑 gdal-2.4.4/swig/java/java.opt 配置 JAVA_HOME 路径(不能在=号前后留空格),

JAVA_HOME=/usr/local/gdal-2.4.4/jdk1.8.0_221/
JAVADOC=$(JAVA_HOME)/bin/javadoc
JAVAC=$(JAVA_HOME)/bin/javac
JAVA=$(JAVA_HOME)/bin/java
JAR=$(JAVA_HOME)/bin/jar
JAVA_INCLUDE=-I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux

编译,安装

cd gdal-2.4.4/swig/java/

make

下面这一步网上摘抄,没试用。

And finally copy the resulting .so files into a directory and update yourLD_LIBRARY_PATH environment variable to point to them:

最后,拷贝编译好的 .so 文件到一个目录,并更新你的 LD_LIBRARY_PATH 环境变量以便指向这些 .so 文件:

$ cd /gdal-1.9.1/swig/java
$ ls | grep .so
libgdalconstjni.so
libgdaljni.so
libogrjni.so
libosrjni.so
$ cp *.so ~/opt/linuxnative/
$ export LD_LIBRARY_PATH=~/opt/linuxnative/ # Put this in .bashrc

6、将geoserver-2.22.0-gdal-plugin.zip解压,拷贝到tomcat发布的geoserver的webapps/geoserver/web-inf/lib/目录下。

将gdal版本java编译的jar文件(gdal.jar)更改为与版本匹配的文件(gdal-2.4.4.jar,在gdal-2.4.4/swig/java/文件夹下),拷贝到目录下并删除gdal-3.2.0.jar文件。

7、设置路径

export LD_LIBRARY_PATH=/usr/local/gdal-2.4.4/swig/java:$LD_LIBRARY_PATH【这个路径一定是java编译的gdal的路径,我刚开始设置为gdal的路径,geoserver启动报错】

export GDAL_DATA=/usr/local/anaconda3/envs/env_django_py39/share/gdal(安装实际情况设置)

通过/etc/profile设置后,调用 source /etc/profile更新

8、结果

tomcat重启一下,打开geoserver网站,添加数据存储时,就会多出gdal对应的栅格数据源选项,如下图所示:

在服务器状态下的模块中也可以看到gdal模块:

django部署过程中gdal错误处理:

django通过mod_wsgi部署后出现no module named '_gdal'问题,一般都是缺少库,

我出现缺少CXXABI_1.3.8问题,需要找到具体原因,可通过如下方法查找:

在需要导入gdal的代码处添加django环境的osgeo模块,如下所示:

sys.path.append('/opt/anaconda3/envs/env_django/lib/python3.9/site-packages/osgeo')

然后打印导入错误消息,通过httpd的log文件查看错误,定位错误原因。

‘CXXABI_1.3.8’ not found错误解决
错误内容

ImportError: /lib64/libstdc++.so.6: version `CXXABI_1.3.8’ not found
(required by /usr/local/python3/lib/python3.7/site-pacnsorflow/python/_pywrap_tensorflow_internal.so) 

我的问题解决方法如下:

(1)查询自己的

strings /lib64/libstdc++.so.6 | grep CXXABI

(2)查询系统上的libstdc++.so

find / -name "libstdc++.so*"

(3)查看其中一个

strings /root/miniconda3/lib/libstdc++.so.6  | grep CXXABI

(4)复制动态库并改变软连接指向:

sudo cp /root/miniconda3/lib/libstdc++.so.6  /usr/lib64/
sudo rm libstdc++.so.6
sudo ln -s libstdc++.so.6.0.25 libstdc++.so.6
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值