VS2019c++配置GDAL和HDF库新手入门

    技术2022-07-14  77

    VS2019c++配置GDAL和HDF库新手入门

    1.准备下载 2.编译和安装2.1编译SQLite2.2编译PROJ2.3安装 编译GDAL 2.4编译GEOS库2.5集成GEOS+HDF4+HDF5

    第一次写博客,记录一下自己VS2019配置GDAL和安装HDF库的艰难过程,参考了好多前辈的教程,我在这边整理记录一下我最终成功的配置过程。 我安装的是x64的Release版本(x86和debug应该也都大同小异,具体可以参考我的最后的参考博客)。

    VS2019 C++,SQLite3 + PROJ6 + GDAL3 + GEOS3.7 + HDF4 + HDF5

    1.准备

    GDAL3.0编译要求PROJ6投影库,而PROJ6又要求SQLite3环境,所以在编译GDAL之前我们需要先编译好SQLite和PROJ6. GDAL本身没有自带HDF库,如果需要读取HDF4/5数据的话还需要集成GEOS库和HDF4/5库。

    下载

    1)下载库(a b c必备,d e f可选) a.GDAL官方下载地址为 官网,我下载的版本是gdal-3.1.1; b.PROJ6的官方下载地址为 官网,我现在的版本为6.3.2版本; c.SQLite3的官方下载地址为官网,下载Source Code下的sqlite-amalgamation-3280000.zip,和Precompiled Binaries for Windows下的sqlite-dll-win32-x86-3280000.zip sqlite-tools-win32-x86-3280000.zip为了方便编译,我将下载的三个文件分别解压在D盘的WORK目录下GDAL、PROJ、SQLite文件夹内,以备后用。 d.GEOS下载,地址官网,我下的geos-3.7.3,后面需要编译; e.HDF4库下载,HDF4.2.6,HDF4.2.6_win_x64.zip; f.HDF5库下载,HDF1.8.7,HDF5-1.8.7_win_x64.zip; e和f下载的就是编译好的,将下载的GEOS、HDF4、HDF5分别解压到自己定义的生成GDAL目录(我的是D:\WORK\GDALwarmerda)下的supportlibs文件夹下,方便后面配置。

    2)工具下载 cmake官方下载地址为官网,下载cmake-3.18.0-rc3-win64-x64.msi文件直接在windows上安装,之后添加环境变量,以便在cmd命令行中使用。详细方法

    2.编译和安装

    2.1编译SQLite

    按照参考1编译

    2.2编译PROJ

    按照参考1编译

    2.3安装 编译GDAL

    这部分与参考1稍微不同(我编译的动态库),结合参考2我是这样弄的:

    解压 将下载好的GDAL3.1.1解压到GDAL文件夹内。修改GDAL源码中的nmake.opt文件(需要修改5处) 42行左右的MSVC_VER=设置为1921,具体数字根据自己的MSVC版本设置,参考这个;66行左右的GDAL_HOME =设置成想要的位置,我设置成D:\WORK\GDALwarmerda;207行左右的WIN64=YES,删掉前面的#取消注释;254行左右的PROJ_INCLUDE和PROJ_LIBRARY设置成上述2.2编译生成的PROJ时的include和lib文件夹,其中PROJ_INCLUDE中的-I后为地址,并把.lib的名称改对;640行左右的SQLITE_INC和SQLITE_LIB设置同上,地址改为SQLite3的对应地址和.lib名称。 至此设置完成,保存文件。 编译GDAL 管理员运行x64 Native Tools Command Prompt for VS 2019(在开始菜单中),cd进入GDAL文件夹下,输入以下3行命令: nmake /f makefile.vc nmake /f makefile.vc install nmake /f makefile.vc devinstall

    完成后会在上面设置的D:\WORK\GDALwarmerda文件夹中生成bin、lib、data、include四个文件夹(别人好像还有html文件夹,不知道我的为啥没有。。但貌似也不影响)

    最后在VS2019中设置库的引用,参考博客中的6-8步(第8步是测试)。 P.S. 其中,第6步 属性管理器的配置中,VS2019中没有Microsoft.Cpp.x64.user文件,可以把VS2017中带的MSBuild文件夹整体复制到路径C:\Users\dell\AppData\Local\Microsoft下,再重新打开属性管理器继续配置就可以看到Microsoft.Cpp.x64.user了。 在此附上MSBuild文件链接,提取码8ouy(感谢前辈的分享)。

    2.4编译GEOS库

    修改GEOS源码文件夹中的nmake.opt文件: 56行的WIN64=设置成YES;166和167行的GEOS_MSVC和GEOS_MSC 分别按照自己的MSVC版本修改,参考这个; 管理员运行x64 Native Tools Command Prompt for VS 2019(在开始菜单中),cd进入GEOS文件夹下,输入以下命令: autogen.bat nmake -f makefile.vc

    完成编译。生成的lib和dll文件在src文件夹下,共五个。

    2.5集成GEOS+HDF4+HDF5

    再次修改GDAL源码中的nmake.opt文件。

    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\GDALwarmerda\supportlibs\geos-3.7.3 GEOS_CFLAGS = -I$(GEOS_DIR)/capi -I$(GEOS_DIR)/include -DHAVE_GEOS GEOS_LIB = $(GEOS_DIR)/src/geos_c_i.lib HDF4和5处(找到# Uncomment the following 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 #HDF4_INCLUDE = $(HDF4_DIR)\include

    #HDF5_PLUGIN = NO #HDF5_DIR = c:\warmerda\supportlibs\hdf5\5-164-win #HDF5_LIB = $(HDF5_DIR)\dll\hdf5dll.lib

    修改为

    HDF4_PLUGIN = NO HDF4_DIR = D:\WORK\GDALwarmerda\supportlibs\HDF4.2.6_win_x64 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 HDF4_INCLUDE = $(HDF4_DIR)\include

    HDF5_PLUGIN = NO HDF5_DIR = D:\WORK\GDALwarmerda\supportlibs\HDF5-1.8.7_win_x64 HDF5_LIB = $(HDF5_DIR)\dll\hdf5dll.lib

    修改完毕,保存文件。

    最后打开x64 Native Tools Command Prompt for VS 2019,进入GDAL文件夹下,重新运行以下三行命令:

    nmake /f makefile.vc nmake /f makefile.vc install nmake /f makefile.vc devinstall

    完成GDAL编译。

    最后的最后,记得将hdf库中的dll文件夹下的.dll文件、GEOS库文件夹下src文件夹中geos_c.dll文件,都拷贝到GDAL编译后存放的目录下的bin文件夹中gdal301.dll的同级目录下,否则会提示你找不到xxx.dll文件。

    大功告成!!! 感谢各位大神~~ [1]. https://blog.csdn.net/weixin_42141589/java/article/details/94357199 [2]. https://blog.csdn.net/qq_32153213/article/details/81363588 [3]. https://blog.csdn.net/zhaojunwuiris/article/details/87862484 [4]. https://blog.csdn.net/tracycaesar/article/details/25514185 [5]. https://blog.csdn.net/qq_38593182/article/details/102772556

    Processed: 0.015, SQL: 9