《GDAL源码剖析与开发指南》一一1.6 GDAL编译

1.6 GDAL编译

GDAL源码剖析与开发指南
GDAL的编译分为三个小节,第一节是常规编译,使用微软的Visual Studio 2008进行编译,如果用微软的其他编译器,编译过程与此类似。需要注意的是,GDAL已经不再支持Visual C++6.0编译器。第二小节主要说明怎样修改GDAL的配置文件,以使GDAL支持更多的数据格式以及算法等。第三小节对编译GDAL的64位版本进行说明。

1.6.1 常规编译
1.使用Visual Studio 2008 IDE编译
在GDAL的源代码目录中,有几个以sln为后缀的文件,比如makegdal10.sln、makegdal80.sln、makegdal71.sln、makegdal90.sln等。这些是VisualStudio的工程文件,文件名中的数字表示VS的版本号:71表示VS2003、80表示VS2005、90表示VS2008、10表示VS2010。我们根据自己电脑安装的VS版本,打开对应的文件,如图1-4所示(使用VS2008SP1版本,打开makegdal90.sln文件)。

然后我们在左侧解决方案点击右键,在弹出菜单中点击“生成”或者“重新生成”命令,GDAL就会开始编译。输出窗口中会有编译过程中的一些信息提示,直到出现生成成功等信息,就表示GDAL已经完成编译,这时在GDAL的源代码目录中会出现gdal.lib、gdal_i.lib、gdal18.dll等文件。如果没有修改GDAL中的nmake.opt文件的话,那么C盘中会出现一个名为“C:\warmerda\bld”的文件夹,里面包含三个文件夹,分别是bin、data和html。bin文件夹中存放的是编译出来的GDAL的可执行程序,包括GDAL提供的十几个工具集;data文件夹就是1.5.1小节中介绍的data文件夹;html文件夹中存放的是各种数据格式的说明文档。

2.使用Visual Studio 2008命令行编译
使用cmd命令行编译,首先在开始菜单中找到“所有程序→Microsoft Visual Studio 2008→Visual Studio Tools→Visual Studio 2008命令提示”,点击“Visual Studio 2008命令提示”弹出如图1-5所示的界面。

使用cd命令,切换到GDAL的源代码目录,如图1-6所示。

切换至GDAL的源代码目录后,依次敲入下面的命令行后回车,等待编译结束即可。

nmake -f makefile.vc
nmake -f makefile.vc install
nmake -f makefile.vc devinstall

同时还有其他的命令,如下所示。

nmake -f makefile.vc clean
nmake -f makefile.vcMSVC\_VER=1400 clean
nmake -f makefile.vcMSVC\_VER=1400 DEBUG = 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源码。

1.6.2 自定义编译
GDAL的强大之处不单单在于可以读取栅格和矢量数据,同时还表现在以下三个方面:第一,可以进行矢量图形之间的一些常用操作,比如求交、求并、缓冲区等;第二,可以进行投影和坐标转换;第三,可以使用配置文件来对GDAL库支持的数据格式进行扩展。

如果使用GDAL默认的编译方式,那么上述的前两个功能您将不能使用,因为GDAL这两大功能是基于另外的两个开源库GEOS(Geometry Engine, Open Source)库和PROJ4库来实现的。下面对这两大库分别做一个简单的说明,讲述如何修改编译文件,让GDAL能够拥有这两大功能。

1.集成GEOS
简单来说,GEOS提供了OGC规范中简单几何要素对象操作的C++语言的实现。更详细的说明可以在GEOS的官网http://geos.osgeo.org中找到。

GEOS库提供了常用的空间操作,比如判断两个几何对象相互关系的函数Contains()、Intersects()、Touches()和Crosses()等,计算两个几何对象的空间操作的函数Difference()、Union()以及Buffer()等。

我们假设已经有编译好的GEOS库,首先使用记事本或者其他的文本编辑器打开GDAL源代码目录下的nmake.opt文件,找到“# Uncomment for GEOS support”这句(1.10版本大概在490行左右),如下面三行代码所示。

#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 = F:\Work\3rdPart\geos-3.2.2
GEOS\_CFLAGS = -I$(GEOS\_DIR)/capi -I$(GEOS\_DIR)/source/headers -DHAVE\_GEOS
GEOS\_LIB     = $(GEOS\_DIR)/source/geos\_c\_i.lib

代码中F:\Work\3rdPart\geos-3.2.2是GEOS存放的主目录,后面两行设置的是GEOS的头文件目录和lib文件路径,设置好后保存即可。对比结果如图1-7所示。

保存完nmake.opt之后,我们按照1.6.1小节中的编译方式进行编译即可。编译后的GDAL将会支持图形之间的操作,因为函数主要是在OGR库中,后面会在OGR库中进行详细说明。编译完成后,我们需将geos_c.dll文件复制到gdal18.dll的同级目录下,否则会提示找不到geos_c.dll文件。

2.集成PROJ.4
PROJ.4是一套开源的坐标投影转换库,它可以完成在两套不同制图投影系统之间的转换,或者不同的椭球体或大地基准面之间的转换。GDAL中用到的坐标转换、投影转换、几何纠正、正射纠正等算法,都需要PROJ.4库的支持。PROJ.4的配置同GEOS库的配置方法相同,在nmake.opt文件中找到PROJ.4库的位置(1.10版本大概在429行左右),如下面的三行代码所示。

#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 = -IF:\Work\3rdPart\proj-4.7.0\src
PROJ\_LIBRARY = F:\Work\3rdPart\proj-4.7.0\src\proj\_i.lib

代码中第一行表示是否使用静态链接的方式,第二行表示PROJ.4库存放的路径,第三行为PROJ.4库的lib文件所在路径,修改后保存即可,对比结果如图1-8所示。

同GEOS库一样,保存完nmake.opt之后,我们按照第一步中的编译方式进行编译即可。编译后,我们同样将proj.dll文件复制到gdal110.dll的同级目录下,否则与坐标转换相关的所有功能都不能使用。

3.集成HDF数据读取
通过上面GEOS和PROJ库的介绍,我们对于GDAL的配置文件nmake.opt已经有了一个初步的了解。下面使用GDAL读取HDF数据也是同样,我们先在HDF的官方网上下载编译好的HDF4和HDF5的库,然后修改配置文件进行编译。HDF官网提供了32位的库和64位的库,这里我们以HDF4.2.6和HDF5-1.8.7两个库为例介绍32位库的编译,对于64位库的编译后面会进行专门介绍。

我们将下载好的HDF4.2.6和HDF5-1.8.7两个库解压,然后在nmake.opt文件中,找到HDF的位置(1.10版本大概在330行左右),代码如下。

# Uncomment the following 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 the following 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 the following and update to enable NCSA HDF Release 4 support.
HDF4\_PLUGIN = NO
HDF4\_DIR =F:\Work\3rdPart\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 =F:\Work\3rdPart\HDF5-1.8.7\_win\_x86
HDF5\_LIB =$(HDF5\_DIR)\dll\hdf5dll.lib

代码修改前后的对比如图1-9所示。

保存,然后编译GDAL即可,同时我们将HDF库中的dll文件夹下的dll文件复制到gdal110.dll的同级目录下。

按照同样的方式,我们可以通过修改配置文件使GDAL支持NetCDF、Oracle等格式。

1.6.3 编译其他方面
1.makegdal_gen.bat使用
下面我们介绍怎样使用makegdal_gen.bat文件生成Visual Studio的工程文件。

首先我们打开cmd命令行窗口,使用cd命令切换到GDAL源代码目录,然后输入makegdal_gen.bat后回车,会得到该工具的一个简单实用帮助,如图1-10所示。

该工具是一个带有命令行参数的批处理工具(在后面对GDAL工具集的介绍中我们会对带有参数的命令行程序以及编写带有命令行的程序作一个详细说明),通过图1-10可以看出其基本语法如下。

makegdal\_gen 7.10 > makegdal71.vcproj
makegdal\_gen 8.00 > makegdal80.vcproj

通过上面的示例我们可以看出,该工具的命令行参数分别是:VS的版本号(具体版本号参考1.6.1小节)、一个大于号“>”、输出的VS的工程名字。如果要使用该命令行生成一个VS2008版本的工程文件,我们可以输入如下命令,回车即可。

makegdal\_gen 9.00 > makegdal90.vcproj

2.编译64位系统下的GDAL
GDAL的64位系统的编译,和32位系统的编译基本相同,首先我们在VS的工程中打开配置管理器,然后在活动解决方案平台的下拉列表中选择“新建”,然后弹出“新建解决方案平台”对话框,选择新平台为x64(需要在安装VS时安装64位的编译环境),然后点击“确定”按钮,最后在VS中选择X64进行编译即可,如图1-11所示。

使用cmd命令行编译基本同32位的一样,区别在于在开始菜单选择的不是“Visual Studio 2008命令提示”,而是“Visual Studio 2008 x64兼容工具命令提示”。

在编译开始之前,我们还需要打开nmake.opt文件,找到131行处的“#WIN64 = YES”,将前面的“#”去掉,保存,然后开始编译。如果就这样编译通过的话,那么恭喜;如果不能顺利编译过去,那么我们需要按照下面的步骤进行设置。

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 $(VB6\_SAFEARRAYSYM)

我们需要将它修改为如下代码。

BASE\_INCLUDE = /INCLUDE:$(SYM\_PREFIX)GDALSimpleImageWarp \
/INCLUDE:$(SYM\_PREFIX)GDALReprojectImage \
/INCLUDE:$(SYM\_PREFIX)GDALComputeMedianCutPCT \
/INCLUDE:$(SYM\_PREFIX)GDALDitherRGB2PCT \
/INCLUDE:$(SYM\_PREFIX)OCTNewCoordinateTransformation $(VB6\_SAFEARRAYSYM)

修改完之后保存,然后重新编译生成GDAL即可。

时间: 2024-07-31 08:21:26

《GDAL源码剖析与开发指南》一一1.6 GDAL编译的相关文章

《GDAL源码剖析与开发指南》一一1.8 GDAL帮助文档生成

1.8 GDAL帮助文档生成 GDAL源码剖析与开发指南1.8.1 Doxygen简介 Doxygen是生成C++注释文档的标准工具,也支持其他语言,如C.Objective-C.C#.PHP.Java.Python.IDL (Corba and Microsoft flavors).Fortran.VHDL.Tcl等. 我们可以通过三种方式来使用Doxygen. 1.从源文件中以HTML形式生成在线文档浏览器,或者以LATEX形式生成非在线的参考手册,也支持RTF (MS-Word).Post

《GDAL源码剖析与开发指南》一一1.7 SWIG编译

1.7 SWIG编译 GDAL源码剖析与开发指南1.7.1 SWIG简介 SWIG全称是Simplified Wrapper and Interface Generator,官方网站是http://www.swig.org/.SWIG是一个开发工具,能够将使用C或者C++编写的软件与其他各种高级编程语言进行嵌入联接.SWIG能应用于各种不同类型的语言,包括常用脚本编译语言例如Perl.PHP.Python.Tcl.Ruby.PHP等,也包括非脚本编译语言,如C#.Common Lisp (CLI

《GDAL源码剖析与开发指南》一一1.5 GDAL源码目录

1.5 GDAL源码目录 GDAL源码剖析与开发指南 下载的GDAL源代码压缩包目录如图1-2所示,使用SVN迁出的GDAL源代码目录如图1-3所示. 从图1-2和图1-3所示可以看出,不管用什么方式获取GDAL的源代码,它的目录结构都是一样的.下面我们就针对目录结构中的每个文件夹和文件作一个简单的说明(按照字母顺序). 1.5.1 文件夹说明 对于图1-3中所示的文件夹,详细说明如下. alg:该文件夹存放的是GDAL库中提供的一些算法的源代码,这些算法包括但不限于:DEM生成等高线算法,图像

《GDAL源码剖析与开发指南》一一1.1 什么是GDAL

1.1 什么是GDAL GDAL源码剖析与开发指南 GDAL全称是Geospatial Data Abstraction Library(地理空间数据抽象库),是一个在X/MIT许可协议下读写空间数据(包括栅格数据和矢量数据)的开源库,它利用抽象数据模型来表达所支持的各种文件格式,还使用一系列命令行工具来进行数据转换和处理. OGR(OGR Simple Features Library)是GDAL项目的一个分支,功能与GDAL类似,只是它提供对矢量数据的读写支持.同时它实现了一个对空间参考信息

《GDAL源码剖析与开发指南》一一1.3 GDAL支持的数据格式

1.3 GDAL支持的数据格式 GDAL源码剖析与开发指南 GDAL支持的数据格式分为两种:栅格数据格式和矢量数据格式.GDAL在每次版本更新的时候,都会加入对新的格式的支持.本书使用GDAL1.10版本中支持的栅格数据格式,如表1-1所示,支持的矢量数据格式如表1-2所示. 注意 文件的最大存储大小不仅由文件的格式决定,而且和操作系统有关系.

《GDAL源码剖析与开发指南》一一1.4 GDAL源码下载

1.4 GDAL源码下载 GDAL源码剖析与开发指南 GDAL的源码下载有两种方式.第一种是直接下载打包好的压缩包,下载地址为:http://trac.osgeo.org/gdal/wiki/DownloadSource.另外,GDAL的各个历史版本都可以在这个地址进行下载:http://download.osgeo.org/gdal/.这种下载方式很简单,此处不作说明.下载完成,使用压缩软件解压即可. 第二种下载方式是使用SVN源代码管理工具直接从GDAL的源码服务器进行下载.下载地址是:ht

《GDAL源码剖析与开发指南》一一1.2 GDAL特点

1.2 GDAL特点 GDAL源码剖析与开发指南GDAL提供对多种栅格数据的支持,包括Arc/Info ASCII Grid(asc),GeoTiff (tiff),Erdas Imagine Images(img),ASCII DEM(dem) 等格式. OGR提供对矢量数据格式的读写支持,包括ESRI Shapefiles.S-57.SDTS.PostGIS.Oracle Spatial.Mapinfo mid/mif和Mapinfo TAB等. GDAL库还提供了一系列算法接口,比如矢量栅

《GDAL源码剖析与开发指南》一一1.9 简单的调用

1.9 简单的调用 GDAL源码剖析与开发指南关于GDAL的使用,关键是要熟悉GDAL的组织结构.类以及类的函数等.最常用的就是动态库的GDAL,当然我们也可以使用静态库,这里只是简单地介绍使用动态GDAL库来做开发. 下面我们简单地使用C++.C#.Python和Java 4种语言分别进行示例,来说明如何使用GDAL进行开发. 1.9.1 C ++使用GDAL首先我们打开Visual Studio2008,新建一个Win32的控制台工程(名字叫GDALCppTest),然后在工程的属性对话框中

《GDAL源码剖析与开发指南》导读

前言 GDAL源码剖析与开发指南 GDAL全称是Geospatial Data Abstraction Library(地理空间数据抽象库),是一个在X/MIT许可协议下读写空间数据(包括栅格数据和矢量数据)的开源库,它利用抽象数据模型来表达所支持的各种文件格式,还使用一系列命令行工具来进行数据转换和处理. 由于GDAL库支持很多数据格式,目前几乎所有的GIS和RS软件底层都使用GDAL来读写空间数据. 目前国内外关于GDAL的图书非常少,比较权威的只有GDAL官网的说明文档,导致用户缺少实用的