window环境下编译GDAL3.4.0

本文详细介绍了在Windows环境下使用Visual Studio 2022编译GDAL 3.4.0的过程,包括所需依赖库如GEOS、Proj等的编译配置方法,并提供了关键步骤及注意事项。

一、编译过程中用到的文件

操作系统: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第一遍编译报错,继续编译一下就可以了)

  1. 编译后的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编译

依据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)/capiI(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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值