Windows上源码编译GDAL-C++库及其依赖库

本文详细介绍了GDAL3.8.5版本的必备、推荐和可选三方库,包括PROJ、TIFF、ZLIB等,并提供了编译步骤和CMake配置建议,帮助用户理解和配置GDAL的编译过程。
摘要由CSDN通过智能技术生成

认识GDAL三方库

本小节是总结当前GDAL 3.8.5版本官方说明里的依赖库部分,旨在告诉大家要知道GDAL到底依赖哪些库,哪些是必须要编译的,哪些是可选扩展,因为它的扩展实在太多太多了:

  1. 必需的三方库(REQUIRED packages )
序号名称说明下载地址
1PROJ最低版本>=6.0proj-9.4.0

只有一个PROJ是GDAL在编译的时候强制要求必须要自己提供

  1. 内置的三方库(Internal libraries)
序号名称说明
1TIFF
2GEOTIFF
3ZLIB
4PNG
5JPEG
6GIF
7JSONC
8OPENCAD
9QHULL
10LERC

GDAL每个版本自己都会内置基础的一些必要库
因此结合1、2可知设置完PROJ就可以常规限度的开始编译并使用GDAL库了

  1. 推荐设置的三方库(RECOMMENDED packages)
序号名称说明
1SWIG全称:Software development tool 连接用C和c++编写的程序与各种高级编程语言的软件开发工具,例如调用JAVA、Python等
2CURL程序能够使用web API
3EXPAT读写XML格式文件
4TIFF最低需要4.0版本,读写TIFF格式文件
5GeoTIFF读写GeoTIFF格式文件
6PNG读写PNG格式文件
7JPEG读写JPEG格式文件
8QHULL处理多维几何数据,凸包、Delaunay三角剖分、Voronoi图等操作
9LERC栅格数据的压缩
10SQLite3链接SQLite数据库能力
10GEOS对几何对象执行复杂的空间查询和操作

和上面2内置有一定的条目重复,表示虽然官方有内置的代码,能够即使在不提供的情况,也可以动态编译这些库
但官方还是更推荐上面几个条目重复的是使用你自己提供的相关库,不要用内置的

  1. 其他可选扩展三方库(RECOMMENDED packages)
PythonODBCCPPMSSQL_NCLI
MySQLICONVLibXml2
XercesCDeflateOpenSSL
CryptoPPZSTDSFCGAL
OpenCADBRUNSLIlibQB3
PCRE2PCRESPATIALITE
RASTERLITE2LibKMLKEA
HDF5WebPFreeXL
GTAMRSIDArmadillo
CFITSIOHDF4ECW
NetCDFOGDIOpenCL
PostgreSQLFYBALibLZMA
LZ4BloscARCHIVE
LIBAECJXLJXL_THREADS
CrnlibbasisuIDB
rdbTileDBOpenEXR
MONGOCXXOpenJPEGHDFS
PopplerPodofoPDFIUM
OracleTEIGHAFileGDB
KDULURATECHArrow
BISONDoxygenShapelib
Java

这些可扩展库里面在以往各种GIS项目开发过程中用的比较多的库有:LibXml2(支持xml读写)
LibXml2用来替换原本的EXPAT,其实也没有仔细对比两个优劣势,公司团队开发环境一直以来就是用的就是libxml2,有时间再做对比分析吧,不是核心问题,其他的用的那就主打一个非常少了,只有特定场景或者技术研究的时候才会附加编译。

前期准备

根据上文,可以直接仅设置PROJ来编译GDAL,但根据官方建议,以及为了学习,我们将推荐与常用库都附加上

GDAL源码:gdal-3.8.5
PROJ源码:proj-9.4.0
SWIG 这个不用,先单论C++,先不考虑和其他例如Java、Python交互
CURL源码:curl-8.7.1
EXPAT 这个也不用,用的更多的是下面的LibXml2
TIFF源码:libtiff-4.6.0
GeoTIFF源码:libgeotiff-1.7.1
PNG源码:libpng-1.6.32
JPEG源码:libjpeg-3.0.1
QHULL源码:QHull-8.0.2
LERC源码:Lerc-4.0.0
SQLite3源码:sqlite-3.45.3
GEOS源码:Geos-3.12.1
LibXml2源码:libxml2-2.12.6

Zlib源码:因PNG强制依赖此库,zlib-1.3.1
Tcl源码:因SQLite3强制依赖此库,TCL-8.6.14

根据上面的依赖关系,则需要按顺序反过来依次编译

CMake一定要注意修改CMAKE_INSTALL_PREFIX的安装路径,不然这么多库整理起来很麻烦
Visual Studio批生成遇到Set Local…错误无法install的时候,将VS作为管理员启动再打开工程就可以解决,但根本问题可能是没有正确指定CMAKE_INSTALL_PREFIX或者库指定的INSTALL属性,输出到C盘、文件名冲突、错误文件地址等等各种情况导致创建文件夹失败,所导致的SetLocal问题

编译

编译基础库

只是名义上的、仅在此处的无需依赖的基础库,并不是真的没有依赖,里面有很多是有可选依赖的,只是没有强制要求附加某项依赖罢了
例如Tiff这个库,它就可选GIF、JPEG、ZLIB、PNG等等三方库依赖
在原则上,上位库不应指定下位库必须要打开什么扩展来进行编译,否则就是耍流氓…(当然这种情况也会有,老外也不是完人,特事特论)
我们最终是要编译GDAL库,因此所有的三方依赖库只用最基础、最低限度的核心模式就好了

  1. 编译Zlib:注意有单独的CMake属性INSTALL来指定生成路径,指定CMAKE_INSTALL_PREFIX不行;
  2. 编译JPEG:CMake直接编译后ALL_BUILD和INSTALL,没有什么特殊的,记得改CMAKE_INSTALL_PREFIX;
  3. 编译CURL:同上;
  4. 编译Tiff:同上;
  5. 编译QHull:同上;
  6. 编译LERC:同上;
  7. 编译Geos:同上;
  8. 编译LibXml2:取消LIBXML_WITH_PYTHON/ICONV/ZLIB/LZMA四个勾选,后续同上;

编译PNG动态库

依赖:zlib(必须)

  1. 配置zlib
    在这里插入图片描述
  2. 设置CMAKE_INSTALL_PREFIX
  3. 生成后ALL_BUILD、INSTALL编译安装

编译TCL、Sqlite3、PROJ

具体可参照另一篇博文:Windows源码编译PROJ指南,有关于TCL、Sqlite3以及PROJ的源码编译方法

编译GeoTiff静态库

依赖:TIFF(必须)、PROJ(必须)

  1. 配置proj
    在这里插入图片描述
  2. 配置tiff,直接设置include_dir和lib_release,设置TIFF_DIR这个CMake导入配置会有问题
    在这里插入图片描述
  3. 设置CMAKE_INSTALL_PREFIX
  4. 生成后ALL_BUILD、INSTALL编译安装

编译GDAL动态库

回到最开始的地方,GDAL如果只是作为其他库的第三方库来使用,可以只附加核心模式的PROJ后直接编译就好了
本文是为了学习并独立使用GDAL才去重新编译并替换这么多三方内置库,而不是一定要替换这些东西

下面的配置建议设置一项就Configure一次,这样会有更多选项出来供查看确认

  1. 取消与我们自己提供三方库重复的内置库勾选(GeoTiff、Jpeg、Lerc、Png、QHull、Tiff、Zlib)
    在这里插入图片描述
  2. 取消GTest
    在这里插入图片描述
  3. 配置zlib
    在这里插入图片描述
  4. 配置curl
    在这里插入图片描述
  5. 配置proj
    在这里插入图片描述
  6. 配置GeoTiff
    在这里插入图片描述
  7. 配置Tiff,需要手动添加一个Entry(TIFF_LIBRARY)
    在这里插入图片描述
  8. 配置JPEG
    在这里插入图片描述
  9. 配置PNG
    在这里插入图片描述
  10. 配置QHull
    在这里插入图片描述
  11. 配置LERC
    在这里插入图片描述
  12. 配置Sqlite3
    在这里插入图片描述
  13. 配置Geos
    在这里插入图片描述
  14. 配置LibXml2,include要设置两个路径
    在这里插入图片描述
  15. 设置CMAKE_INSTALL_PREFIX
  16. 生成后ALL_BUILD、INSTALL编译安装

组织二次开发包

神功大成!!!

  1. bin
    在这里插入图片描述

需要额外将proj的share目录下的proj.db也拷贝放到bin目录下

  1. include
    在这里插入图片描述

  2. lib
    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值