Win64下編譯集成GEOS和Proj4的GDAL


1.編譯GEOS

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

2.編譯Proj4

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

點擊“configure”,選擇合適的編譯器,就會出現上圖的配置選項。這里注意BUILD_LIBPROJ_SHARED和BUILD_SHARED_LIBS這兩個選項默認是沒有勾選的,如果直接編譯,之后得到的就會是靜態庫。由於我需要動態庫,這里就都勾選了(兩者分別勾選的具體含義還需要進一步確認)。此外,CMAKE_INSTALL_PREFIX這個配置項也要注意。cmake得到的工程都有install工程,生成之后就會自動把需要的頭文件、lib還有dll復制到對應的目錄中去,這樣方便我們管理。

之后點擊“Generate”,之前設置的build目錄中就生成了VS的工程。

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

3.GDAL集成Proj4和GEOS

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

1) 修改安裝的目錄

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

將GDAL_HOME修改為自己想要的目錄。在編譯和安裝指令完成之后,就會把GDAL的所有的精簡依賴發送到這個目錄中。

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。

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

最后輸出的結果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM