GDAL編譯(轉)

1、簡單的編譯

一、使用VisualStudio IDE編譯

首先進入GDAL的源代碼目錄,能夠看到有幾個sln爲後綴的文件名,好比makegdal10.sln,makegdal80.sln,makegdal71.sln,makegdal90.sln 。這些文件是VisualStudio的工程文件,後面的數字對應的VS的版本號,71表示的VS2003,80表示VS2005,90表示VS2008,還有10表示VS2010等。根據本身電腦安裝的VS版本,打開對應的文件,以下圖所示(使用VS2008SP1版本,打開makegdal90.sln文件):html

圖3 VS2008打開編譯GDAL1.8.1web

而後在左側解決方案右鍵,彈出菜單中選擇「生成」或者「從新生成」命令,而後GDAL就會開始編譯,等待輸出窗口中提示,執行完成,生成成功等信息後,就表示GDAL已經完成編譯。同時會在GDAL的源代碼目錄中會出現gdal.lib,gdal_i.lib,gdal18.dll等文件,若是你沒有修改GDAL中的nmake.opt文件的話,那麼同時會在你的C盤中會出現一個叫「C:\warmerda\bld」的文件夾,裏面會包含三個文件夾,分別是bin,data和html。其中bin文件夾中存放的是編譯出來的GDAL的可執行程序,包括GDAL提供的十幾個工具集;data文件夾就是在第一節中的介紹的data文件夾;html文件夾中存放的是各類數據格式的說明文檔。算法

二、使用cmd命令行編譯

使用cmd命令行編譯,首先在「開始菜單\全部程序\Microsoft Visual Studio 2008\Visual Studio Tools\ Visual Studio 2008命令提示」,點擊「Visual Studio 2008 命令提示」會彈出下面的界面:api

而後使用cd命令,切換到GDAL的源代碼目錄,以下圖所示:編輯器

切換到GDAL的源代碼目錄後,依次敲入下面的命令行後回車,等待編譯結束便可。函數

nmake -f makefile.vc工具

nmake -f makefile.vc install測試

nmake -f makefile.vc devinstallspa

同時還有其餘的命令,如:.net

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、自定義編譯

GDAL的強大之處不僅僅在於能夠讀取柵格和矢量數據,同時它的強大之處還在於下面幾個方面,第一能夠進行矢量圖形之間的一些經常使用操做,好比:求交,求並,緩衝區等等。第二能夠進行投影和座標轉換。若是使用GDAL默認的編譯方式,那麼上述的兩個很是強大的功能您將不能使用,由於GDAL這兩大功能是基於另外的兩個開源庫GEOS(Geometry Engine, Open Source)庫和PROJ4庫來實現的。下面對這兩大庫分別作一個簡單的說明,以及如何修改編譯文件,讓GDAL可以擁有這兩大功能。

一、集成GEOS

關於GEOS庫的說明,網上有不少,同時在GEOS的官網http://geos.osgeo.org有詳細的說明,簡單的來講,GEOS提供了OGC規範中簡單幾何要素對象操做的C++語言的實現。在地理信息系統領域,拓撲模型是重要的,其計算方法簡單可是很可貴以實現。使得GEOS不一樣於其餘項目的也正是「空間謂詞」與「空間操做」。空間謂詞是比較兩個空間對象並返回一個布爾變量值做爲結果,它代表了存在於兩個空間對象之間特殊的關係。好比典型的空間謂詞有Contains(), Intersects(), Touches(), andCrosses()函數等。GEOS項目中對該些函數的實現是異常強壯的,即便是奇異幾何對象或是臨時的座標系統運算也不能使其運算不正常或計算錯誤。目前絕大多數的商業軟件仍然在最基礎的空間謂詞處理上相對成熟,這正是GEOS項目的重要意義。「空間操做」則主要是對兩個幾何對象進行計算而且返回一個新的幾何實體。比較典型的操做函數如Difference(), Union()以及Buffer()等。GEOS中的操做算法已經被普遍的通過了測試。GEOS類庫被各種開源空間信息軟件項目普遍應用,使用GEOS,它們能夠基於最新的規範的幾何實體來完成,同時也擁有了複雜空間方法的實現。

關於GEOS的說明和編譯,後面會單獨寫一篇文件進行介紹,這裏假設已經下載的是編譯好的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是我本機的GEOS存放的主目錄,後面兩行設置的是GEOS的頭文件目錄和lib文件路徑。設置好後保存便可。對比結果以下圖以下:

保存完nmake.opt以後,按照第一步中的編譯方式進行編譯便可。編譯後的GDAL就將會支持圖形之間的操做等處理。函數主要是在OGR庫中,後面會在OGR庫中進行詳細的介紹說明。編譯後,千萬別忘記將geos_c.dll文件拷貝到gdal18.dll的同級目錄下,不然會提示你找不到geos_c.dll文件。

二、集成Proj4

Proj4是一套開源的座標投影轉換類庫,它能夠完成在兩套不一樣製圖投影系統之間的轉換,一樣不一樣的橢球體或大地基準面之間也能夠成功的完成轉換。GDAL中用到的座標轉換,投影轉換,幾何糾正,正射糾正等算法,都離不開座標轉換,也就是說要使用這些算法,必須有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

其中第一行表示是否使用靜態連接的方式,第二行的路徑表示,proj庫存放的位置,第三行爲proj庫的lib文件所在路徑。修改後保存便可,對比結果以下圖以下:

同GEOS庫同樣,保存完nmake.opt以後,按照第一步中的編譯方式進行編譯便可。對於Proj庫的使用後面會在有一篇文章對其作一個簡單的介紹說明。編譯後,一樣千萬別忘記將proj.dll文件拷貝到gdal18.dll的同級目錄下,不然會提示你找不到proj.dll文件。

三、集成HDF數據讀取

經過上面GEOS和PROJ庫的介紹,相信對gdal的配置文件,nmake.opt有一個比較初步的瞭解了吧,那麼下面對於使用GDAL支持hdf數據的讀取也是一樣,先下載好hdf4和hdf5的庫,我用的是HDF4.2.6和HDF5-1.8.7兩個庫,在hdf的官方網上有編譯好的庫,直接下載編譯好的庫便可,對於hdf庫的編譯,我沒有進行編譯過,應該和其餘的開源庫都是差很少吧。同時官網提供了32位的庫和64位的庫,這裏都是按照32位的庫進行介紹,後面會有一個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的同級目錄下。

3、其餘方面

一、makegdal_gen.bat使用

對於makegdal_gen.bat的做用,在上一篇文章中已經進行了介紹,下面對怎麼使用該文件生成VS的工程文件作一個說明。

首先打開cmd命令行窗口,使用cd命令切換到GDAL源代碼目錄,而後輸入makegdal_gen.bat回車,會獲得該工具的一個簡單實用幫助,以下圖所示:

      

該工具的使用方法是帶有命令行參數的一個批處理工具,(在後面對GDAL工具集的介紹中會對帶有參數的命令行程序,以及編寫帶有命令行的程序有一個比較詳細的說明)。經過上圖能夠看出該工具的基本語法是:

makegdal_gen 7.10 >makegdal71.vcproj

makegdal_gen 8.00 >makegdal80.vcproj

經過上面的示例能夠看出,該工具的命令行參數分別是,首先是VS的版本號,具體版本號參考本文第一小節,而後跟一個大於號「>」,最後是輸出的VS的工程的名字。那麼如今我要使用該命令行生成一個VS2008版本的工程文件,我能夠輸入下面的命令,而後回車便可:

makegdal_gen 9.00 >makegdal90.vcproj

二、編譯64位系統下的GDAL

對於GDAL的64位系統的編譯,基本和32位系統的編譯同樣,首先在VS的工程中,打開配置管理器,而後再活動解決方案平臺的下拉列表中選擇新建,而後彈出,新建解決方案平臺對話框,選擇新平臺爲x64(須要在安裝VS的時候安裝64位的編譯環境),而後點擊肯定便可。最後在VS中選擇X64進行編譯便可。以下圖所示:

對於使用cmd命令行編譯,基本同本文開始,不同的只有,在開始菜單選擇的不是「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)

就是將後面的@開始,後面的數字刪除。如今開始編譯吧,呵呵。祝你成功!此處能夠參考個人博文:http://liminlu0314.blog.163.com/blog/static/111800520106223508717/

三、GDAL1.8後打開中文路徑失敗問題

此處能夠參考個人博文:http://blog.csdn.net/liminlu0314/article/details/6610069,在此再也不贅述。

相關文章
相關標籤/搜索