window环境下编译GDAL3.4.0
一、编译过程中用到的文件
操作系统:Windows 11 专业版 21H2
Visual Studio IDE:Microsoft Visual Studio Community 2022 (64 位) - Current
GDAL版本:GDAL:3.4.0
GEOS版本:geos-3.10.1
PROJ版本:proj-8.1.1
SWIG版本:swigwin-4.0.2
FileGDB_API版本:FileGDB_API_1.5.2\FileGDB_API_VS2019
二、Geos编译
1、 打开文件:C:\dev\geos-3.10.1\INSTALL,清楚的写出了在各个平台下如何编译
2、 打开vs2022,选择文件-打开-cmake,找到CMakeLists.txt文件
3、 在vs中选择生成即可(切换到release)(release第一遍编译报错,继续编译一下就可以了)
- 编译后的dll和lib文件在文件夹中C:\OpenSource\geos-3.10.1\out\build\x64-Release\lib和C:\OpenSource\geos-3.10.1\out\build\x64-Release\bin
5.将文件复制到指定目录:
C:\OpenSource\geos-3.10.1\out\build\x64-Release\capi\ geos_c.h
复制到
C:\OpenSource\geos-3.10.1\capi\ geos_c.h
三、Proj编译
特别的,不知道哪里配置错误,默认编译出来是debug版本,编译gdal的时候报错,打开文件:“CMakeLists.txt”,找到下面的代码,这里把判断注释掉,直接默认设置为Release版本即可
#Set a default build type for single-configuration cmake generators if
#no build type is set.
#if(NOT CMAKE_CONFIGURATION_TYPES AND NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Release)
#endif()
四、如何查看MSVC_VER值
在代码中敲下面的代码,鼠标放上去就看到了
#if _MSC_VER ==1000
#endif
五、修改文件:nmake.opt
将
MSVC_VER=1500
修改为:
MSVC_VER=1930
将:
SWIG = swig.exe
修改为:
SWIG = D:\OpenSource\swig\swigwin-2.0.12\swig.exe
取消注释:
#WIN64=YES
修改为:
WIN64=YES
取消注释并修改:
#Uncomment for GEOS support (GEOS >= 3.1.0 required)
#GEOS_DIR=C:/warmerda/geos
#GEOS_CFLAGS = -I
(
G
E
O
S
D
I
R
)
/
c
a
p
i
−
I
(GEOS_DIR)/capi -I
(GEOSDIR)/capi−I(GEOS_DIR)/source/headers -DHAVE_GEOS
#GEOS_LIB = KaTeX parse error: Double subscript at position 25: …)/source/geos_c_̲i.lib **修改为:** …(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS
GEOS_LIB = $(GEOS_DIR)/out/build/x64-Release/lib/geos_c.lib
取消注释并修改:
#FGDB_ENABLED = YES
#FGDB_PLUGIN = YES
#FGDB_SDK = C:\Users\rburhum\Desktop\FileGDB_API_VS2008_1_0beta3
#FGDB_INC = $(FGDB_SDK)\include
#FGDB_LIB = $(FGDB_SDK)\lib\FileGDBAPI.lib
修改为:
FGDB_ENABLED = YES
#FGDB_PLUGIN = YES
FGDB_SDK = C:\OpenSource\FileGDB_API_VS2019
FGDB_INC = $(FGDB_SDK)\include
FGDB_LIB = $(FGDB_SDK)\lib64\FileGDBAPI.lib
参考网站:https://trac.osgeo.org/gdal/wiki/FileGDB#no1
FileGDB_API_1_4编译报错
取消注释并修改:
#PROJ stuff (required dependency: PROJ >= 6)
#PROJ_INCLUDE = -Id:\install-proj\local\include
#Note: add shell32.lib is needed starting with PROJ 7.0 in some circumstances
#for static linking. See https://github.com/OSGeo/gdal/issues/2488
#And ole32.lib also since PROJ 7.1 (see https://github.com/OSGeo/gdal/issues/2743)
#PROJ_LIBRARY = d:\install-proj\local\lib\proj_6_0.lib shell32.lib ole32.lib
修改为:
#PROJ stuff (required dependency: PROJ >= 6)
PROJ_INCLUDE = -IC:\dev\proj\src
#Note: add shell32.lib is needed starting with PROJ 7.0 in some circumstances
#for static linking. See https://github.com/OSGeo/gdal/issues/2488
#And ole32.lib also since PROJ 7.1 (see https://github.com/OSGeo/gdal/issues/2743)
PROJ_LIBRARY = C:/dev/proj/_build.vs2022/lib/proj.lib shell32.lib ole32.lib
取消注释并修改:
#SQLite Libraries
#SQLITE_INC=-IN:\pkg\sqlite-win32
#SQLITE_LIB=N:\pkg\sqlite-win32\sqlite3_i.lib
修改为:
#SQLite Libraries
SQLITE_INC=-IC:\ProgramData\Miniconda3\pkgs\sqlite-3.36.0-h2bbff1b_0\Library\include
SQLITE_LIB=C:\ProgramData\Miniconda3\pkgs\sqlite-3.36.0-h2bbff1b_0\Library\lib\sqlite3.lib
取消注释并修改:
#Uncomment to use libcurl (DLL by default)
#The cURL library is used for WCS, WMS, GeoJSON, SRS call importFromUrl(), WFS, CouchDB, /vsicurl/ etc.
#CURL_DIR=C:\curl-7.15.0
#CURL_INC = -I$(CURL_DIR)/include
#Uncomment following line to use libcurl as dynamic library
#CURL_LIB = $(CURL_DIR)/libcurl_imp.lib wsock32.lib wldap32.lib winmm.lib
#Uncomment following two lines to use libcurl as static library
#CURL_LIB = $(CURL_DIR)/libcurl.lib wsock32.lib wldap32.lib winmm.lib
#CURL_CFLAGS = -DCURL_STATICLIB
修改为:
#Uncomment to use libcurl (DLL by default)
#The cURL library is used for WCS, WMS, GeoJSON, SRS call importFromUrl(), WFS, CouchDB, /vsicurl/ etc.
CURL_DIR=C:\ProgramData\Miniconda3\pkgs\libcurl-7.78.0-h86230a5_0\Library
CURL_INC = -I$(CURL_DIR)/include
#Uncomment following line to use libcurl as dynamic library
#CURL_LIB = $(CURL_DIR)/libcurl_imp.lib wsock32.lib wldap32.lib winmm.lib
#Uncomment following two lines to use libcurl as static library
CURL_LIB = $(CURL_DIR)/lib/libcurl.lib wsock32.lib wldap32.lib winmm.lib
CURL_CFLAGS = -DCURL_STATICLIB
取消注释并修改为:
#if using an external libtiff library. Must be libtiff >= 4.0
TIFF_INC = -IC:\ProgramData\Miniconda3\pkgs\libtiff-4.2.0-hd0e1b90_0\Library\include
TIFF_LIB = C:\ProgramData\Miniconda3\pkgs\libtiff-4.2.0-hd0e1b90_0\Library\lib/tiff.lib
管理员身份运行
x64 Native Tools Command Prompt for VS 2022 Current
执行下面的命令
nmake /f makefile.vc MSVC_VER=1930 WIN64=YES
nmake /f makefile.vc install
nmake /f makefile.vc devinstall
cd swig\csharp
nmake /f makefile.vc interface
nmake /f makefile.vc
nmake /f makefile.vc install