GDAL2.4+GEOS3.7.2+PROJ4.9.2+HDF4.2.6+HDF5-1.8.7的编译安装

库各自是什么请百科,或看官网。

以下下载的版本和配置基于windows7 32bit+vs2010,windows+vs平台下其他的大同小异,别的操作系统的话参考大神李民录博客

GDAL源码剖析(二)之编译说明

GDAL源码剖析(八)之编译GEOSPROJ4

本文算是是以上两篇博客在windows7 32bit+vs2010平台下的一个归纳总结

另外,这些GDAL的依赖库的安装,你也可以不全部装,想装哪个就下哪个,编译哪个,GDAL中的便已配置文件nmake.opt就改对应的地方,详细看下面。


一、下载并解压(括号内附上各库官网)


1、GDAL源代码下载地址:

ftp://ftp.remotesensing.org/gdalhttp://download.osgeo.org/gdal/,(官网:http://www.gdal.org/

2、GEOS源代码下载地址:

官网下download标签点击一个直接下载,(官网:http://trac.osgeo.org/geos/

3、PROJ4源代码下载地址:

官网下download标签下source code下点击直接下载,(官网:http://trac.osgeo.org/proj/

4、HDF4\HDF5!编译过!下载地址:

HDF4.2.6:http://www.hdfgroup.org/ftp/HDF/releases/HDF4.2.6/bin/windows/

HDF1.8.7:http://www.hdfgroup.org/ftp/HDF5/releases/hdf5-1.8.7/bin/windows/

均点选有win x86(需要64位的选win x64)字样的那个下载,推荐下载这两个版本,更高版本的文件结构改变,后面的配置会不一样哦。。。差那么一点版本也无所谓啦。

下载完了之后解压的地址:

GDAL的可以随便放,GEOS和PROJ4的源码在后面配置GDAL的编译时需要用到的,最好规划好地方,不然电脑文件夹很乱。HDF是编译过的,也最好规划好。

那我是这样放的:

GDAL源码地址:E:\STUDY\学习\GDAL

然后在D盘新建一个文件夹GDAL用来存放编译后的GDAL,里面才建一个supportlibs文件夹存放依赖库

GEOS源码地址:D:\GDAL\supportlibs\geos-3.4.2

PROJ4源码地址:D:\GDAL\supportlibs\proj-4.8.0

HDF4地址:D:\GDAL\supportlibs\HDF4.2.6_win_x86

HDF5地址:D:\GDAL\supportlibs\HDF5-1.8.7_win_x86        

               

二、编译支持库GEOS+PROJ4


1、打开vs2010命令行工具

开始菜单->所有程序->Microsoft Visual Studio 2010->VisualStudio Tools->Visual Studio命令提示(2010),右键管理员打开

2、在这个命令提示工具中进入之前源码存放的位置

方法:以D:\GDAL\supportlibs\geos-3.4.2为例,首先输入D回车,然后输入cd D:\GDAL\supportlibs\geos-3.4.2回车

编译GEOS和PROJ4要分别进入各自的源代码文件夹,这里只是放在一起讲

3、编译

GEOS:进入源代码目录后,首先输入autogen.bat回车,然后输入nmake /f makefile.vc src_dir回车

PROJ4:进入源代码目录后,直接输入nmake /f makefile.vc install-all回车


三、编译GDAL


1、修改编译配置文件nmake.opt(看着很多代码,其实只要细心很简单,关键要细心)

首先修改编译后GDAL存放路径的配置,修改nmake.opt文件中的54行左右,改为你想要存放的地址,代码如下:

GDAL_HOME= "D:\GDAL"

 

以下内容参考GDAL源码剖析(二)之编译说明

主要是将之前哪些库的相关路径写到GDAL的编译配置文件nmake.opt中去

1)、集成HDF数据读取

修改nmake.opt文件中的330行左右,代码如下:

#Uncomment thefollowing and update to enable NCSA HDF Release 4 support.

#HDF4_PLUGIN= NO

#HDF4_DIR=       D:\warmerda\HDF41r5

#HDF4_LIB=        /LIBPATH:$(HDF4_DIR)\lib Ws2_32.lib

 

#Uncomment thefollowing and update to enable NCSA HDF Release 5 support.

#HDF5_PLUGIN= NO

#HDF5_DIR=       c:\warmerda\supportlibs\hdf5\5-164-win

#HDF5_LIB=        $(HDF5_DIR)\dll\hdf5dll.lib

修改为下面的代码:

#Uncomment thefollowing and update to enable NCSA HDF Release 4 support.

HDF4_PLUGIN= NO

HDF4_DIR = D:\GDAL\supportlibs\HDF4.2.6_win_x86

HDF4_LIB = $(HDF4_DIR)\dll\hd426m.lib $(HDF4_DIR)\dll\hm426m.lib \

$(HDF4_DIR)\lib\hd426.lib $(HDF4_DIR)\lib\hm426.lib Ws2_32.lib



# Uncomment the following and update to enable NCSA HDF Release 5 support.

HDF5_PLUGIN = NO

HDF5_DIR = D:\GDAL\supportlibs\HDF5-1.8.7_win_x86

HDF5_LIB = $(HDF5_DIR)\dll\hdf5dll.lib

对比代码如下图:(路径以上面为准)

保存。

2)、集成Proj4

GEOS库的配置方法,在nmake.opt文件中,找到proj4库的位置,大概在352行左右。将下面的三行代码:

#PROJ_FLAGS=-DPROJ_STATIC

#PROJ_INCLUDE=-Id:\projects\proj.4\src

#PROJ_LIBRARY=d:\projects\proj.4\src\proj_i.lib

修改为:

#PROJ_FLAGS=-DPROJ_STATIC

PROJ_INCLUDE= -ID:\GDAL\supportlibs\proj-4.8.0\src

PROJ_LIBRARY = D:\GDAL\supportlibs\proj-4.8.0\src\proj_i.lib

其中第一行表示是否使用静态链接的方式,第二行的路径表示,proj库存放的位置,第三行为proj库的lib文件所在路径。修改后保存即可,对比结果如下图如下:(路径以上面为准)

保存。

3)、集成GEOS

首先使用记事本或者其他的文本编辑器打开GDAL源代码目录下的nmake.opt文件,找到“# Uncomment for GEOS support”这句,大概在405行左右,将下面三行代码:

#GEOS_DIR=C:/warmerda/geos

#GEOS_CFLAGS=-I$(GEOS_DIR)/capi -I$(GEOS_DIR)/source/headers -DHAVE_GEOS

#GEOS_LIB    =$(GEOS_DIR)/source/geos_c_i.lib

修改为:

GEOS_DIR=D:\GDAL\supportlibs\geos-3.4.2

GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS

GEOS_LIB     = $(GEOS_DIR)/src/geos_c_i.lib

对比结果如下图如下:(路径以上面为准)

编译后的GDAL就将会支持图形之间的操作等处理。函数主要是在OGR库中。保存

2、编译GDAL

1)、打开vs2010命令行工具

开始菜单->所有程序->Microsoft Visual Studio 2010->VisualStudio Tools->Visual Studio命令提示(2010),右键管理员打开

2)、在这个命令提示工具中进入之前GDAL源码存放的位置

方法:以E:\STUDY\学习\GDAL\gdal1100\gdal-1.10.0为例,首先输入D:回车,然后输入cd E:\STUDY\学习\GDAL\gdal1100\gdal-1.10.0回车

3)、编译

首先输入nmake /f makefile.vc回车

然后输入nmake /f makefile.vc install回车

最后输入nmake /f makefile.vc devinstall回车

等待编译完成!

3)、拷贝GEOS+PROJ4+HDF的dll文件到GDAL目录

编译后,记得hdf库中的dll文件夹下的dll文件、PROJ4库源代码src文件夹下的dll文件proj.dllGEOS库文件夹下src文件夹中geos_c.dll文件,都拷贝到GDAL编译后存放的目录下的bin文件夹中gdal18.dll的同级目录下,否则会提示你找不到proj.dllgeos_c.dll文件。

四、 后记

1. cmd命令行编译

使用cmd命令行编译,首先在“开始菜单\所有程序\Microsoft Visual Studio 2008\Visual Studio Tools\ Visual Studio 2008命令提示”,点击“Visual Studio 2008 命令提示”会弹出下面的界面:

然后使用cd命令,切换到GDAL的源代码目录,如下图所示:

切换到GDAL的源代码目录后,依次敲入下面的命令行后回车,等待编译结束即可。
nmake -f makefile.vc
nmake -f makefile.vc install
nmake -f makefile.vc devinstall
同时还有其他的命令,如:
nmake -f makefile.vc clean
nmake -f makefile.vc MSVC_VER=1400clean
nmake -f makefile.vc MSVC_VER=1400DEBUG=1
上面六行的命令含义依次是:
编译GDAL库
编译GDAL库,并安装(这里安装的意思就是将生成的dll,exe等文件拷贝到C:\warmerda\bld目录),
编译GDAL库,并安装开发者模式(安装的意思同上,开发者模式意思是将开发用的include文件夹中的头文件和lib文件一同拷贝到C:\warmerda\bld目录,此时会在C:\warmerda\bld目录中多出来两个文件夹,分别是include和lib,分别存放的是GDAL的头文件和lib文件,用于调用GDAL库使用)。
清理GDAL库,同时会删除编译GDAL库所生成的临时文件,作用相当于在VS环境中的清理命令。
作用同上,但是添加了一个MSVC_VER=1400,表示使用VS2005编译。
编译GDAL库的debug模式,可以用来调试GDAL源码。

2、编译64位系统下的GDAL

对于使用cmd命令行编译,基本同本文开始,不一样的只有,在开始菜单选择的不是“Visual Studio 2008 命令提示”而是“Visual Studio 2008 x64 兼容工具命令提示”,剩下的编译步骤跟前面的一样。
在编译开始之前,还需要打开nmake.opt文件,找到131行处的“#WIN64=YES”,将前面的“#”去掉,保存,然后开始编译。
如果出现错误:

LINK : error LNK2001: unresolved external symbol >_OCTNewCoordinateTransformation at 8 
LINK : error LNK2001: unresolved external symbol _vbSafeArrayToPtr at16 
LINK : error LNK2001: unresolved external symbol _GDALDitherRGB2PCT at 28
LINK : error LNK2001: unresolved external symbol > >_GDALComputeMedianCutPCT at 32
LINK : error LNK2001: unresolved external symbol _GDALReprojectImage at 48
LINK : error LNK2001: unresolved external symbol _GDALSimpleImageWarp at36
LINK : error LNK2001: unresolved external symbol _OGRRegisterAll
LINK : error LNK2001: unresolved external symbol _OGR_G_GetPointCount
LINK : error LNK2001: unresolved external symbol _OPTGetProjectionMethods
LINK : error LNK2001: unresolved external symbol _OSRValidate
LINK : error LNK2001: unresolved external symbol_OGRFeatureStylePuller 

那么需要按照下面的
步骤进行一点点设置。
1:在GDAL目录下的nmake.opt文件中,找到SYM_PREFIX的定义,应该在438行左右
将SYM_PREFIX=_ 改为SYM_PREFIX= 就是将最后的下划线去掉
2:在GDAL目录下的makefile.vc文件中,找到46行左右的代码,如下:
BASE_INCLUDE =/INCLUDE:_GDALSimpleImageWarp@36
/INCLUDE:_GDALReprojectImage@48
/INCLUDE:_GDALComputeMedianCutPCT@32
/INCLUDE:_GDALDitherRGB2PCT@28
/INCLUDE:_OCTNewCoordinateTransformation@8 ( V B 6 S A F E A R R A Y S Y M ) 修 改 为 : B A S E I N C L U D E = / I N C L U D E : (VB6_SAFEARRAYSYM) 修改为: BASE_INCLUDE =/INCLUDE: (VB6SAFEARRAYSYM)BASEINCLUDE=/INCLUDE:(SYM_PREFIX)GDALSimpleImageWarp
/INCLUDE:KaTeX parse error: Undefined control sequence: \ at position 32: …ReprojectImage \̲ ̲ /INCLUDE:(SYM_PREFIX)GDALComputeMedianCutPCT
/INCLUDE:KaTeX parse error: Undefined control sequence: \ at position 31: …LDitherRGB2PCT \̲ ̲/INCLUDE:(SYM_PREFIX)OCTNewCoordinateTransformation $(VB6_SAFEARRAYSYM)
就是将后面的@开始,后面的数字删除。现在开始编译吧

5 编译geos库找不到VC版本号

使用nmake编译geos库的时候需要注意的是在nmake.opt文件中需要自己看一下自己nmake.exe的版本,我的vs2017 x64 Native Tools Command Prompt 2017版本号不在nmake.opt文件中,所以在执行命令nmake -f makefile.vc的时候会报错Cannot determine Visual C++ version:
备注:MSVC_VER=1910(根据编译器来确定。1400是指 VS 版本为2010,1800是指 VS 版本为2013,1900是指 VS 版本为2015,1910是指 VS 版本为2017,1920是指 VS 版本为2019)
GDAL2.4+GEOS3.7.2+PROJ4.9.2+HDF4.2.6+HDF5-1.8.7的编译安装_第1张图片

解决办法就是在nmake.opt文件中加入当前nmake的版本号:
GDAL2.4+GEOS3.7.2+PROJ4.9.2+HDF4.2.6+HDF5-1.8.7的编译安装_第2张图片
这样编译就可以通过了,默认得版本是Realease,最后会输出geos.lib,geos_d.lib,geos_i.lib,geos_i_d.lib,geos_c_i.lib,geos_c_i_d.lib,geos.dll,geos_d.dll,geos_c.dll,geos_c_d.dll,一般我们使用geos_c_i.lib与geos_c.dll。

ttps://blog.csdn.net/sx341125/article/details/100052400

4 在VS2017的项目中配置GDAL

打开vs2017,新建一个 c++ 空项目。然后通过视图->其他窗口->属性管理器,打开属性管理器。
在VC++目录依次添加包含目录、库目录:
包含目录:F:\GDAL\include
库目录:F:\GDAL\lib

再在链接器->输入添加附加依赖项,手动输入gdal_i.lib

设置环境变量
依次点击计算机->属性->高级系统设置->环境变量->系统变量内的 path
F:\GDAL\bin
备注:所依赖的.dll文件都需要放到”F:\GDAL\bin“ 目录下。

参考

VS2017编译配置GDAL——超详细,适合初学者!!!
GDAL源码剖析

VS2017编译gdal-2.4.2与geos-3.7.2

你可能感兴趣的:(GDAL2.4+GEOS3.7.2+PROJ4.9.2+HDF4.2.6+HDF5-1.8.7的编译安装)