GDAL编译(转)
一、簡單的編譯
1、使用VisualStudio IDE編譯
首先進(jìn)入GDAL的源代碼目錄,可以看到有幾個sln為后綴的文件名,比如makegdal10.sln,makegdal80.sln,makegdal71.sln,makegdal90.sln 。這些文件是VisualStudio的工程文件,后面的數(shù)字對應(yīng)的VS的版本號,71表示的VS2003,80表示VS2005,90表示VS2008,還有10表示VS2010等。根據(jù)自己電腦安裝的VS版本,打開對應(yīng)的文件,如下圖所示(使用VS2008SP1版本,打開makegdal90.sln文件):
圖3 VS2008打開編譯GDAL1.8.1
然后在左側(cè)解決方案右鍵,彈出菜單中選擇“生成”或者“重新生成”命令,然后GDAL就會開始編譯,等待輸出窗口中提示,執(zhí)行完成,生成成功等信息后,就表示GDAL已經(jīng)完成編譯。同時會在GDAL的源代碼目錄中會出現(xiàn)gdal.lib,gdal_i.lib,gdal18.dll等文件,如果你沒有修改GDAL中的nmake.opt文件的話,那么同時會在你的C盤中會出現(xiàn)一個叫“C:\warmerda\bld”的文件夾,里面會包含三個文件夾,分別是bin,data和html。其中bin文件夾中存放的是編譯出來的GDAL的可執(zhí)行程序,包括GDAL提供的十幾個工具集;data文件夾就是在第一節(jié)中的介紹的data文件夾;html文件夾中存放的是各種數(shù)據(jù)格式的說明文檔。
2、使用cmd命令行編譯
使用cmd命令行編譯,首先在“開始菜單\所有程序\Microsoft Visual Studio 2008\Visual Studio Tools\ Visual Studio 2008命令提示”,點(diǎn)擊“Visual Studio 2008 命令提示”會彈出下面的界面:
然后使用cd命令,切換到GDAL的源代碼目錄,如下圖所示:
切換到GDAL的源代碼目錄后,依次敲入下面的命令行后回車,等待編譯結(jié)束即可。
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庫,并安裝開發(fā)者模式(安裝的意思同上,開發(fā)者模式意思是將開發(fā)用的include文件夾中的頭文件和lib文件一同拷貝到C:\warmerda\bld目錄,此時會在C:\warmerda\bld目錄中多出來兩個文件夾,分別是include和lib,分別存放的是GDAL的頭文件和lib文件,用于調(diào)用GDAL庫使用)。
清理GDAL庫,同時會刪除編譯GDAL庫所生成的臨時文件,作用相當(dāng)于在VS環(huán)境中的清理命令。
作用同上,但是添加了一個MSVC_VER=1400,表示使用VS2005編譯。
編譯GDAL庫的debug模式,可以用來調(diào)試GDAL源碼。
二、自定義編譯
GDAL的強(qiáng)大之處不單單在于可以讀取柵格和矢量數(shù)據(jù),同時它的強(qiáng)大之處還在于下面幾個方面,第一可以進(jìn)行矢量圖形之間的一些常用操作,比如:求交,求并,緩沖區(qū)等等。第二可以進(jìn)行投影和坐標(biāo)轉(zhuǎn)換。如果使用GDAL默認(rèn)的編譯方式,那么上述的兩個非常強(qiáng)大的功能您將不能使用,因?yàn)镚DAL這兩大功能是基于另外的兩個開源庫GEOS(Geometry Engine, Open Source)庫和PROJ4庫來實(shí)現(xiàn)的。下面對這兩大庫分別做一個簡單的說明,以及如何修改編譯文件,讓GDAL能夠擁有這兩大功能。
1、集成GEOS
關(guān)于GEOS庫的說明,網(wǎng)上有很多,同時在GEOS的官網(wǎng)http://geos.osgeo.org有詳細(xì)的說明,簡單的來說,GEOS提供了OGC規(guī)范中簡單幾何要素對象操作的C++語言的實(shí)現(xiàn)。在地理信息系統(tǒng)領(lǐng)域,拓?fù)淠P褪侵匾?#xff0c;其計算方法簡單但是很難得以實(shí)現(xiàn)。使得GEOS不同于其他項(xiàng)目的也正是“空間謂詞”與“空間操作”。空間謂詞是比較兩個空間對象并返回一個布爾變量值作為結(jié)果,它表明了存在于兩個空間對象之間特殊的關(guān)系。比如典型的空間謂詞有Contains(), Intersects(), Touches(), andCrosses()函數(shù)等。GEOS項(xiàng)目中對該些函數(shù)的實(shí)現(xiàn)是異常強(qiáng)壯的,即使是奇異幾何對象或是臨時的坐標(biāo)系統(tǒng)運(yùn)算也不能使其運(yùn)算不正常或計算錯誤。目前絕大多數(shù)的商業(yè)軟件仍然在最基礎(chǔ)的空間謂詞處理上相對成熟,這正是GEOS項(xiàng)目的重要意義。“空間操作”則主要是對兩個幾何對象進(jìn)行計算并且返回一個新的幾何實(shí)體。比較典型的操作函數(shù)如Difference(), Union()以及Buffer()等。GEOS中的操作算法已經(jīng)被廣泛的經(jīng)過了測試。GEOS類庫被各類開源空間信息軟件項(xiàng)目廣泛應(yīng)用,使用GEOS,它們可以基于最新的規(guī)范的幾何實(shí)體來完成,同時也擁有了復(fù)雜空間方法的實(shí)現(xiàn)。
關(guān)于GEOS的說明和編譯,后面會單獨(dú)寫一篇文件進(jìn)行介紹,這里假設(shè)已經(jīng)下載的是編譯好的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=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是我本機(jī)的GEOS存放的主目錄,后面兩行設(shè)置的是GEOS的頭文件目錄和lib文件路徑。設(shè)置好后保存即可。對比結(jié)果如下圖如下:
保存完nmake.opt之后,按照第一步中的編譯方式進(jìn)行編譯即可。編譯后的GDAL就將會支持圖形之間的操作等處理。函數(shù)主要是在OGR庫中,后面會在OGR庫中進(jìn)行詳細(xì)的介紹說明。編譯后,千萬別忘記將geos_c.dll文件拷貝到gdal18.dll的同級目錄下,否則會提示你找不到geos_c.dll文件。
2、集成Proj4
Proj4是一套開源的坐標(biāo)投影轉(zhuǎn)換類庫,它可以完成在兩套不同制圖投影系統(tǒng)之間的轉(zhuǎn)換,同樣不同的橢球體或大地基準(zhǔn)面之間也可以成功的完成轉(zhuǎn)換。GDAL中用到的坐標(biāo)轉(zhuǎn)換,投影轉(zhuǎn)換,幾何糾正,正射糾正等算法,都離不開坐標(biāo)轉(zhuǎn)換,也就是說要使用這些算法,必須有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 =-IF:\Work\3rdPart\proj-4.7.0\src
PROJ_LIBRARY =F:\Work\3rdPart\proj-4.7.0\src\proj_i.lib
其中第一行表示是否使用靜態(tài)鏈接的方式,第二行的路徑表示,proj庫存放的位置,第三行為proj庫的lib文件所在路徑。修改后保存即可,對比結(jié)果如下圖如下:
同GEOS庫一樣,保存完nmake.opt之后,按照第一步中的編譯方式進(jìn)行編譯即可。對于Proj庫的使用后面會在有一篇文章對其做一個簡單的介紹說明。編譯后,同樣千萬別忘記將proj.dll文件拷貝到gdal18.dll的同級目錄下,否則會提示你找不到proj.dll文件。
3、集成HDF數(shù)據(jù)讀取
通過上面GEOS和PROJ庫的介紹,相信對gdal的配置文件,nmake.opt有一個比較初步的了解了吧,那么下面對于使用GDAL支持hdf數(shù)據(jù)的讀取也是同樣,先下載好hdf4和hdf5的庫,我用的是HDF4.2.6和HDF5-1.8.7兩個庫,在hdf的官方網(wǎng)上有編譯好的庫,直接下載編譯好的庫即可,對于hdf庫的編譯,我沒有進(jìn)行編譯過,應(yīng)該和其他的開源庫都是差不多吧。同時官網(wǎng)提供了32位的庫和64位的庫,這里都是按照32位的庫進(jìn)行介紹,后面會有一個gdal的64位庫的編譯介紹。
將下載好的HDF4.2.6和HDF5-1.8.7兩個庫解壓,然后修改nmake.opt文件中的278行左右,代碼如下:
# 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 =????????? 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 thefollowing 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
對比代碼如下圖:
保存,然后編譯gdal即可,同時將hdf庫中的dll文件夾下的dll文件拷貝到gdal18.dll的同級目錄下。
三、其他方面
1、makegdal_gen.bat使用
對于makegdal_gen.bat的作用,在上一篇文章中已經(jīng)進(jìn)行了介紹,下面對怎么使用該文件生成VS的工程文件做一個說明。
首先打開cmd命令行窗口,使用cd命令切換到GDAL源代碼目錄,然后輸入makegdal_gen.bat回車,會得到該工具的一個簡單實(shí)用幫助,如下圖所示:
??????
該工具的使用方法是帶有命令行參數(shù)的一個批處理工具,(在后面對GDAL工具集的介紹中會對帶有參數(shù)的命令行程序,以及編寫帶有命令行的程序有一個比較詳細(xì)的說明)。通過上圖可以看出該工具的基本語法是:
makegdal_gen 7.10 >makegdal71.vcproj
makegdal_gen 8.00 >makegdal80.vcproj
通過上面的示例可以看出,該工具的命令行參數(shù)分別是,首先是VS的版本號,具體版本號參考本文第一小節(jié),然后跟一個大于號“>”,最后是輸出的VS的工程的名字。那么現(xiàn)在我要使用該命令行生成一個VS2008版本的工程文件,我可以輸入下面的命令,然后回車即可:
makegdal_gen 9.00 >makegdal90.vcproj
2、編譯64位系統(tǒng)下的GDAL
對于GDAL的64位系統(tǒng)的編譯,基本和32位系統(tǒng)的編譯一樣,首先在VS的工程中,打開配置管理器,然后再活動解決方案平臺的下拉列表中選擇新建,然后彈出,新建解決方案平臺對話框,選擇新平臺為x64(需要在安裝VS的時候安裝64位的編譯環(huán)境),然后點(diǎn)擊確定即可。最后在VS中選擇X64進(jìn)行編譯即可。如下圖所示:
對于使用cmd命令行編譯,基本同本文開始,不一樣的只有,在開始菜單選擇的不是“Visual Studio 2008 命令提示”而是“Visual Studio 2008 x64 兼容工具命令提示”,剩下的編譯步驟跟前面的一樣。
在編譯開始之前,還需要打開nmake.opt文件,找到131行處的“#WIN64=YES”,將前面的“#”去掉,保存,然后開始編譯。如果就這樣編譯過去的話,那么恭喜你,如果不能順利編譯過去的,那么需要按照下面的步驟進(jìn)行一點(diǎn)點(diǎn)設(shè)置。
1:在GDAL目錄下的nmake.opt文件中,找到SYM_PREFIX的定義,應(yīng)該在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)
就是將后面的@開始,后面的數(shù)字刪除。現(xiàn)在開始編譯吧,呵呵。祝你成功!此處可以參考我的博文:http://liminlu0314.blog.163.com/blog/static/111800520106223508717/
3、GDAL1.8后打開中文路徑失敗問題
此處可以參考我的博文:http://blog.csdn.net/liminlu0314/article/details/6610069,在此不再贅述。
轉(zhuǎn)載于:https://www.cnblogs.com/yuxiuting/p/3316626.html
總結(jié)
- 上一篇: 正则环视
- 下一篇: [原]unity3d ios平台内存优化