前期准备工作:
1,下载apache-ant-1.9.11工具软件,并解压到D:\gdal\apache-ant-1.9.11目录下,配置环境变量
ANT_HOME=D:\gdal\apache-ant-1.9.11
PATH=%PATH%;%ANT_HOME%\bin
2,下载JDK1.8,用来编译jar和jni的dll。解压到D:\jdk1.8.0_40_b25目录下,配置环境变量
JAVA_HOME=D:\jdk1.8.0_40_b25
PATH=%PATH%;%JAVA_HOME%\bin
3,下载swigwin-3.0.12,并解压到D:\gdal\swigwin-3.0.12目录下备用。
准备工作做完后,开始编译工作:
1,编译geos-3.6.2
将下载到的源代码压缩包解压到D:\gdal\geos-3.6.2目录下,打开vs2015的开发人员命令提示框,切换到D:\gdal\geos-3.6.2目录下,然后输入
1 autogen.bat 2 nmake /f makefile.vc
稍等片刻,即可完成。
2,编译proj-4.9.3
将下载的源码压缩包解压到D:\gdal\proj-4.9.3目录下,打开vs2015的开发人员命令提示框,切换到D:\gdal\proj-4.9.3目录下,然后输入
nmake /f makefile.vc install-all
只要你没动任何配置,顺利编译完成后,你会在C:\PROJ找到编译过的可执行文件和dll,以及后期开发备用的头文件和lib文件等。这个目录暂时不用,后面编译完gdal后,要把这个目录下的的bin目录下的所有exe和dll复制到gdal编译后的bin目录下,否则,gdal会提示缺少dll文件导致无法运行。
3,编译gdal-2.3.0
将下载到的gdal2.3的源码压缩包解压到D:\gdal\gdal-2.3.0目录下,先不要编译,使用Notepad++工具软件打开D:\gdal\gdal-2.3.0这个目录下的nmake.opt文件,
找到GDAL_HOME = "D:\gdal\gdal-2.3.0-rt"这一行,修改成我这样的目录,这个目录要提前创建。这个目录是存放编译完成后所有的可执行文件和dll的地方。
找到”#WIN64=YES”,编译64位GDAL时,要删除前面的#。
找到“# Uncomment for GEOS support”这句,
将下面的三行代码改成如下:
GEOS_DIR=D:/gdal/geos-3.6.2
GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS
GEOS_LIB = $(GEOS_DIR)/src/geos_c_i.lib
然后找到# PROJ stuff这一行
将下面的代码修改成如下:
# for proj 4.x:
PROJ_FLAGS = -DPROJ_STATIC -DPROJ_VERSION=4
PROJ_INCLUDE = -ID:\gdal\proj-4.9.3\src
PROJ_LIBRARY = D:\gdal\proj-4.9.3\src\proj_i.lib
找到SWIG=swig.exe这一句,假如没有将swig的目录添加到环境变量中,那么将这句后面的swig.exe修改为swig.exe的全路径,如上面准备工作的第三步的目录D:\gdal\swigwin-3.0.12\swig.exe。如果设置了环境变量,那么就不需要进行修改了。
然后紧挨着下面几行代码,设置java的路径和java的include头文件的,修改成我如下的样子
# SWIG Java settings
!IFNDEF JAVA_HOME
JAVA_HOME = D:\jdk1.8.0_40_b25
!ENDIF
!IFNDEF ANT_HOME
ANT_HOME=D:\gdal\apache-ant-1.9.11
!ENDIF
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\win32
最后,别忘了保存。
做完以上准备工作,就可以开始编译了,打开vs2015的开发人员命令提示框,切换到D:\gdal\gdal-2.3.0目录下,然后依次执行如下命令:
1 nmake -f makefile.vc 2 nmake -f makefile.vc install 3 nmake -f makefile.vc devinstall
第一步会等待大约20分钟到30分钟,等待完成后,执行第二,和第三个命令,你会在D:\gdal\gdal-2.3.0-rt这个目录下,找到所有编译过的可执行文件和dll文件,包括支持二次开发的头文件和lib文件。
还记得编译proj的时候,会在C:\PROJ目录下生成编译后的文件吗?到C:\PROJ\bin目录下,将该目录下所有文件复制到D:\gdal\gdal-2.3.0-rt\bin目录下,现在,你会发现所有gdal的工具软件都可以运行了。
4、编译java使用的gdal.jar
这一步是为java程序员编译gdal.jar和需要使用到的jni的dll文件的。方便在java环境下使用gdal所有功能。
如果你严格按照我前面的步骤进行,到这里就简单了,还是打开打开vs2015的开发人员命令提示框,切换到D:\gdal\gdal-2.3.0\swig目录下,然后执行如下命令:
1 nmake /f makefile.vc java
等待完成后,你会在D:\gdal\gdal-2.3.0\swig\java目录下找到gdal.jar文件和gdalalljni.dll文件。
这里有个变化,我之前在编译gdal2.2.3的时候,会生成如下几个文件
- gdalconstjni.dll
- gdaljni.dll
- ogrjni.dll
- osrjni.dll
- gdal.jar
到了gdal2.3,就把那4个dll都合并到一个dll文件里了。
最后将 gdal.jar文件和gdalalljni.dll文件也复制到D:\gdal\gdal-2.3.0-rt\bin目录下。
如何在java里使用。用eclipse新建一个java项目,在lib中进入gdal.jar文件,注意,我编译这个jar的时候使用的是jdk1.8,所有新建工程也要使用jdk1.8。然后一路下一步。完成后,选择编译配置,
这里是我mac上的环境配置,如果在win下,你要把这个里改成D:\gdal\gdal-2.3.0-rt\bin目录。然后就可以使用java代码做gdal的二次开发了。
后记:
如果需要编译64位的dll和jni的dll,需要启用vs2015的64位编译命令行
从开始菜单打开“VS2015 x64 本机工具命令提示符”工具
然后编译geos库的时候,要传递一个WIN64=YES的参数
编译proj的时候,不用传递任何参数,proj代码会自动判断当前编译环境。
编译gdal的时候,一定要在nmake.opt文件里将
#WIN64=YES前面的注释去掉,然后就是等编译结束就行了。