使用java开发gdal相关配置,版本为2.4.0
前言
使用java开发gdal对于初学者并不是很友好,因为gdal是用c++写的,java引入的包不过是一个壳子,真正起作用的的安装的c++库。java是不能直接使用c++库的,但是可以调用c++程序所编译出来地动态库。动态库在windows为dll文件,linux上为so文件,所以只要将对应的动态库文件放在java程序可以调用到的地方就可以。那么如果获取到对应的动态库,把他们放在什么位置,自己去摸索的时候会特别费时间,希望这边文章可以帮助到在黑夜中徘徊的人,也可以帮助到我自己。
windows系统配置
1. 获取dll文件
gdal编译库下载,我下载的版本是2.4.0的。需要的dll文件有:
- release-1900-x64-gdal-2-4-4-mapserver-7-4-3\bin\gdal\java 文件内gdalalljni.dll
- release-1900-x64-gdal-2-4-4-mapserver-7-4-3\bin 当前目录下所有的dll文件
2. 放置到对应位置
我所尝试的java程序可以解析的位置有两个:
- 项目的根目录,这么多的dll放在根目录下,显得很不专业。
- jdk_home/jre/bin目录,放在这里看起来舒服多了
在我们引入gdal.jar包开发完,运行的时候所遇到的问题有:
-
找不到gdallalljni.dll模块
如果gdalalljni.dll文件放在了对应的位置,这个时候还找不到,那么有可能是程序运行的时候没有用到这个jre。我开发的时候就遇到过这个问题,用的是idea编辑器。idea编辑器在运行的时候有个默认的jre,这个jre不是我安装的jdk里面的jre,所以肯定是识别不了里面的dll的 -
找不到gdalalljni.dll的依赖
如果是找不到gdalalljni.dll的依赖,那么是说可以找到gdalalljni.dll只是它所依赖的其他dll有缺失的。那么到底缺失了哪些,不能靠猜测,这里有个查看dll依赖的工具。下载后,找到DependenciesGui.exe打开软件,导入gdalalljni.dll,则可以查看所有的依赖情况。
linux系统配置
1. 获取so文件
so文件是gdal源码在linux系统上编译出来的文件,如果你对linux系统足够熟悉,而且愿意花时间的话可以自己去尝试。我最终采用的方式是从别人编译好的文件拷过来的,是可以直接使用的(链接:https://pan.baidu.com/s/1iAYqhiBi8EDP1UVhffdLzA 提取码:bd2w)。因为我也自己尝试过去编译,只是自己的处理问题的能力实在太差,最后还是不了了之。虽然没有编译成功,但是知道如果想自己动手编译需要实现了解这些知识点:
- linux基本知识
- yum包管理
- cmake编译
2. 放置到对应的位置
linux系统默认的识别动态库的位置有 /usr/lib64, 所以我就把获取到的so文件拷贝到该目录下。那么如何检测拷入的文件是完整无误的呢,通过命令ldd libgdalalljni.so
可以列出 libgdalalljni.so所有的依赖,如果所有的依赖都能找到,那么就可以了。如果有缺失的怎么办呢?那么就需要安装对应的类,可以通过yum安装,也可以通过源码安装。通常需要安装的库有boost等。
3. 配置环境变量
vi /etc/profile
添加export PROJ_LIB=/usr/local/gis/proj72/share/proj