gdal联合编译C++版本proj.4、geos、hdf4、hdf5、netcdf

gdal联合编译C++版本proj.4、geos、hdf4、hdf5、netcdf

各依赖库源代码版本及下载地址

gdal

版本:2.4.4
下载地址:https://gdal.org/download.html
说明:下载的是源码文件,也是本地联合编译的中心文件,其他四个三方库是融入到gdal中调用的

Proj.4

版本:4.9.3
下载地址:https://proj.org/download.html
说明:源码文件,需要使用vs进行编译,重要文件在src文件夹中

geos

版本:3.7.3
下载地址:http://download.osgeo.org/geos
说明:源码,需要使用vs进行编译,重要文件是include文件夹和src文件夹下的geos_c_i.lib文件

HDF4

版本:4.2.6
下载地址:https://support.hdfgroup.org/ftp/HDF/releases/HDF4.2.6/bin/windows/
说明:是已经编译好了的文件,也包含源码,重要文件在dll文件夹中

HDF5

版本:1.10.3
下载地址:https://support.hdfgroup.org/ftp/HDF5/releases/hdf5-1.10/hdf5-1.10.3/bin/
说明:下载的文件解压后是一个.msi文件,双击可安装,安装之后得到一个文件夹,其中的内容和HDF4中的内容相似,重要文件在bin文件夹中

netCDF

版本:4.7.2-NC4
下载地址: http://www.unidata.ucar.edu/downloads/netcdf/ftp/netCDF4.7.2-NC4-64.exe
说明:下载所得是一个.exe可执行文件,双击安装之后得到一个包含三个文件夹的文件夹,重要文件在bin当中

编译环境及工具版本

Windows x64、vs2015 x64 本机工具提示符

编译安装

注:示例文件组织模式如下:
在这里插入图片描述

1、 编译geos

进入geos文件夹,如果可以找到autogen.bat和makefile.vc两个文件,则证明文件夹正确,打开vs2015 x64 本机工具提示符,cd到geos文件夹,即autogen.bat和makefile.vc所在文件夹,先后运行autogen.bat和nmake /f makefile.vc src_dir

2、 编译proj.4

cd转到proj.4的文件夹,其中应该包含makefile.vc,运行nmake /f makefile.vc install-all

3、 修改gdal的编译配置文件make.opt

  1. 进入gdal文件夹,找到make.opt文件并使用notepad++打开,修改gdal安装路径
    使用搜索工具,搜索GDAL_HOME,找到如57行的位置(不同版本位置可能会有差别),将值改为自己准备安装gdal的文件夹
    在这里插入图片描述

  2. 修改编译版本为64位
    搜索win64,找到如191行的位置,去掉其前面的#号(#号代表注释)
    在这里插入图片描述

  3. 集成geos数据读取路径
    搜索geos,找到如621~623行的位置,去掉前面的#号,将如621行GEOS_DIR的值修改为geos文件夹的路径,如geos文件夹内的内容未做修改,可将622和623行中的内容修改为截图所示
    在这里插入图片描述

  4. 集成HDF4数据读取路径
    搜索hdf4,找到如441~443行的位置,去掉前面的#号
    将441行HDF4_DIR修改为HDF4文件夹的路径,其余内容与图上一致,442行为dll文件夹下的.lib文件列表,完整的内容为:$(HDF4_DIR)\dll\hd426m.lib $(HDF4_DIR)\dll\hm426m.lib $(HDF4_DIR)\lib\hd426.lib $(HDF4_DIR)\lib\hm426.lib Ws2_32.lib
    在这里插入图片描述

  5. 集成HDF5数据读取路径
    搜索hdf5,找到如451~453行的位置,去掉前面的#号
    将452行HDF5_DIR的值修改为HDF5文件夹的路径,其余内容与图上一致,453行完整的内容为:$(HDF5_DIR)\lib\hdf5_cpp.lib $(HDF5_DIR)\lib\hdf5_hl.lib $(HDF5_DIR)\lib\hdf5_hl_cpp.lib $(HDF5_DIR)\lib\hdf5_tools.lib $(HDF5_DIR)\lib\libhdf5.lib $(HDF5_DIR)\lib\libhdf5_cpp.lib $(HDF5_DIR)\lib\libhdf5_hl.lib $(HDF5_DIR)\lib\libhdf5_hl_cpp.lib $(HDF5_DIR)\lib\libszip.lib $(HDF5_DIR)\lib\libzlib.lib $(HDF5_DIR)\lib\szip.lib $(HDF5_DIR)\lib\zlib.lib
    在这里插入图片描述

  6. 集成netCDF数据读取路径
    搜索netcdf,找到如541~545行的位置,去掉前面的#号
    将544行NETCDF_LIB和545行NETCDF_INC_DIR中的D:\gdal-pgh45n替换为netcdf所在的文件夹路径,保证按照所写路径可以找到netcdf.lib和include文件夹
    在这里插入图片描述

4、 编译gdal

将vs2015 x64 本机工具cd转到gdal文件夹,即make.opt所在文件夹,先后运行
nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall
运行结束之后指定的安装路径下会出现如下的多个文件夹
在这里插入图片描述

编译及运行过程中可能出现的问题及对应的解决方法

1)、NMAKE:fatal error U1077. return code 0x460
工程中连接了一个lib文件,链接的时候却出现不能解析的外部符号。大概率是32位和64位不兼容问题,也有可能是包含的lib是错的。可以从以下几个方面检查:1、gdal的配置文件make.opt中的win64=yes是否打开以及是否将注释符号去掉;2、vs工具提示符使用的版本不对,使用其他版本的工具重试;3、参与编译的文件存在32版本
2)、NMAKE:fatal error U1077. return code 0x49d
文件路径不对,查询到文件不存在,可以返回到make.opt挨个检查文件路径是否准确,可以沿着设置的路径依次进入检查,避免漏检
3)运行安装的gdal中的bin文件夹下的.exe提示缺少某.dll文件,一般在某个依赖库的bin文件或其他文件下有该.dll文件,对于dpapi.dll的缺失可以在网上搜索下载
4)当所有的.dll都不缺失后,运行上述.exe文件提示netcdf定位H5Literate失败,这是由于netcdf中的hdf5与gdal中引用的hdf5版本冲突导致的,笔者采用的办法是寻找与netcdf中的gdf5中的一样的hdf5引入到gdal中
注:gdal运行依赖库所需的.dll文件
在这里插入图片描述

测试gdal是否正确联合编译其他三方库的命令

测试时采用dos命令行启动.exe读取或计算指定路径下的文件,根据运行结果及提示信息判断gdal是否正确集成对应的三方库,因此在输入测试命令前需要提前cd将当前路径转到安装的gdal的bin文件夹下

测试hdf

命令:gdalinfo.exe 目标.HDF文件
提示该.HDF文件如下图所示的各种数据信息则证明安装成功,否则安装失败 在这里插入图片描述

测试proj.4

命令:gdalwarp.exe" -t_srs “PROJCS[“WGS_1984_Web_Mercator_Auxiliary_Sphere”,GEOGCS[“GCS_WGS_1984”,DATUM[“D_WGS_1984”,SPHEROID[“WGS_1984”,6378137.0,298.257223563]],PRIMEM[“Greenwich”,0.0],UNIT[“Degree”,0.0174532925199433]],PROJECTION[“Mercator_Auxiliary_Sphere”],PARAMETER[“False_Easting”,0.0],PARAMETER[“False_Northing”,0.0],PARAMETER[“Central_Meridian”,0.0],PARAMETER[“Standard_Parallel_1”,0.0],PARAMETER[“Auxiliary_Sphere_Type”,0.0],UNIT[“Meter”,1.0],AUTHORITY[“Esri”,3857]]” 源tif文件 目标tif文件

测试netCDF

命令:gdalwarp.exe -t_srs “+proj=latlong +datum=WGS84” -te 112.0 28.4 116.7 32.3 -tr 0.05 0.05 -dstnodata -9999 -overwrite NETCDF:源.nc文件路径:AOT_Merged 目标.nc文件路径,如gdalwarp.exe -t_srs “+proj=latlong +datum=WGS84” -te 112.0 28.4 116.7 32.3 -tr 0.05 0.05 -dstnodata -9999 -overwrite NETCDF:F:\H08_20200727_0100_1HARP030_FLDK.02401_02401.nc:AOT_Merged F:\1.tif
错误提示:
1) 若提示ERROR 4: `NETCDF:F:\H08_20200727_0100_1HARP030_FLDK.02401_02401.nc:AOT_Merged’ does not exist in the file system, and is not recognized as a supported dataset name.说明netCDF和gdal版本不兼容,需要更换netcdf版本,笔者是由netCDF3更换为了netCDF4解决了这个问题
2) 若出现如图所示的提示
在这里插入图片描述

说明netCDF中的hdf5版本号是1.10.3,而gdal中的hdf5版本号是1.8.19,两者不一致,需要将gdal中的版本更换为和netCDF中的一样,即需要重新下载1.10.3版本的hdf联合编译gdal

附:
联合编译好的gdal.
单独编译好但还没做集成的文件
完全没改动过的源文件

猜你喜欢

转载自blog.csdn.net/weixin_39130561/article/details/108463015