Win64下編譯集成GEOS和Proj4的GDAL

1.編譯GEOS

可參看個人這篇文檔 VS2015編譯GEOS的debug和release版本api

2.編譯Proj4

如今最新的proj5.2.0已經能夠經過cmake進行編譯了,嘗試了一下確實比之前要方便點。解壓下載的proj5.2.0的壓縮包,在cmake界面填入以下路徑:工具

點擊「configure」,選擇合適的編譯器,就會出現上圖的配置選項。這裏注意BUILD_LIBPROJ_SHARED和BUILD_SHARED_LIBS這兩個選項默認是沒有勾選的,若是直接編譯,以後獲得的就會是靜態庫。因爲我須要動態庫,這裏就都勾選了(二者分別勾選的具體含義還須要進一步確認)。此外,CMAKE_INSTALL_PREFIX這個配置項也要注意。cmake獲得的工程都有install工程,生成以後就會自動把須要的頭文件、lib還有dll複製到對應的目錄中去,這樣方便咱們管理。ui

以後點擊「Generate」,以前設置的build目錄中就生成了VS的工程。debug

用VS打開工程,生成解決方案,等待編譯完成。有的VS項目互相依賴,可能須要多生成幾回。最後,生成一次INSTALL項目,以前CMAKE_INSTALL_PREFIX設置的目錄就會有相應的頭文件、dll、lib以及依賴。code

3.GDAL集成Proj4和GEOS

我這裏編譯的是GDAL的2.3.3版本。解壓出gdal-2.3.3目錄,找到目錄中的nmake.opt,裏面記錄着相關的編譯設置。用記事本打開,修改相應的配置。如下#號註釋表示以前的配置,不帶#號的表示修改以後的。htm

1) 修改安裝的目錄

#GDAL_HOME = "C:\warmerda\bld"
GDAL_HOME = "D:\Work\GDALBuild\gdal-2.3.3\result"

將GDAL_HOME修改成本身想要的目錄。在編譯和安裝指令完成以後,就會把GDAL的全部的精簡依賴發送到這個目錄中。blog

2) 配置Proj4

# PROJ stuff
# Uncomment the following lines to link PROJ library statically. Otherwise
# it will be linked dynamically during runtime.
# To use the new API of proj5 or later, use
#PROJ_FLAGS = -DPROJ_STATIC -DPROJ_VERSION=5
# for proj 4.x:
#PROJ_FLAGS = -DPROJ_STATIC -DPROJ_VERSION=4

#PROJ_INCLUDE = -Id:\projects\proj.4\src
PROJ_INCLUDE = -ID:\Work\GDALBuild\proj-5.2.0\src
#PROJ_LIBRARY = d:\projects\proj.4\src\proj_i.lib
!IFDEF DEBUG  
PROJ_LIBRARY = D:\Work\GDALBuild\proj-5.2.0\result\x64_debug\local\lib\proj_5_2_d.lib
!ELSE  
PROJ_LIBRARY = D:\Work\GDALBuild\proj-5.2.0\result\x64_release\local\lib\proj_5_2.lib
!ENDIF

根據註釋,PROJ_FLAGS是靜態編譯的時候才須要開啓的,而剛纔咱們編譯的Proj4編譯的是動態庫,因此不用管這個配置項目。PROJ_INCLUDE是須要的頭文件,根據實例引用到proj的src目錄便可。PROJ_LIBRARY表示須要的lib,這裏根據是否debug模式,引入剛纔編譯的不一樣的.lib。文檔

3) 配置GEOS

# Uncomment for GEOS support (GEOS >= 3.1.0 required)
#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:/Work/GDALBuild/geos-3.7.1
GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS
!IFDEF DEBUG  
GEOS_LIB     = $(GEOS_DIR)/geos_build/x64_debug/geos_c_i_d.lib
!ELSE  
GEOS_LIB     = $(GEOS_DIR)/geos_build/x64_release/geos_c_i.lib
!ENDIF

這段配置的意思是設置GEOS_DIR爲GEOS的根目錄,GEOS_CFLAGS引用到根目錄下的capi文件夾和include文件夾做爲編譯須要的頭文件,根據是不是debug模式,設置GEOS_LIB爲對應的lib。get

4) 自定義動態庫名稱(可跳過)

#GDAL_DLL = gdal$(VERSION).dll
!IFDEF DEBUG    
GDAL_DLL =  gdal$(VERSION)D_CL.dll   
!ELSE    
GDAL_DLL =  gdal$(VERSION)_CL.dll    
!ENDIF

根據這篇文章《自定義編譯gdal庫》,能夠將生成DLL、lib根據是否debug模式改爲不一樣的名稱。嘗試過屢次,修改dll名稱是能夠的,修改lib名稱存在問題。

5) 編譯

在安裝VS2015環境後的「開始菜單」中找到「VS2015x64本機工具命令提示符」並啓用。CD到gdal-2.3.3目錄,依次輸入如下指令(debug模式):

nmake -f makefile.vc MSVC_VER=1900 WIN64=1 DEBUG=1 ANALYZE=1 WITH_PDB=1
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 DEBUG=1 ANALYZE=1 WITH_PDB=1 install
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 DEBUG=1 ANALYZE=1 WITH_PDB=1 devinstall

第一個指令表示編譯,時間較長。第二個第三個指令表示安裝,會把GDAL的依賴複製到GDAL_HOME制定的的文件夾。若是須要release模式,則輸入如下指令:

nmake -f makefile.vc MSVC_VER=1900 WIN64=1
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 install
nmake -f makefile.vc MSVC_VER=1900 WIN64=1 devinstall

最後輸出的結果:

相關文章
相關標籤/搜索