VS2019编译安装GDAL(C++)程序库

2023-11-21 05:52

本文主要是介绍VS2019编译安装GDAL(C++)程序库,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、GDAL简介

        GDAL,全称Geospatial Data Abstraction Library,即地理空间数据抽象库,是一个在X/MIT许可协议下读写空间数据的开源库,可以通过命令行工具来进行数据的转换和处理。而在调用中我们常用的OGR(OpenGIS Simple Features Reference Implementation)则是GDAL的一个子项目,实现了一个对空间参考信息进行处理的类。这其中,GDAL主要支持对栅格数据的处理,而OGR主要进行矢量数据的处理,二者通过一个生成系统进行维护,合称为GDAL,用于很多著名的GIS产品(例如ArcGIS、QGIS等)的底层,支持python、C\C++、R等各种语言的API。

二、GDAL安装流程(默认已安装Visual Studio 2019)

(一)cmake安装

        本文选择下载cmake 3.27.8(Windows ×64 Installer)版本。需要注意的是,在Install Options安装步骤中我们既可以选择“Add CMake to the system PATH for all users”,也可以选择“Add CMake to the system PATH for the current user”,根据自身需求而定。下载网址见安装官网[1]。

(二)sqlite下载

        本文选择下载sqlite 3.44.0版本,SQLite作为数据库引擎为proj库提供数据支持并且与GDAL库相配合。进入官网后分别下载Source Code中的一项“sqlite-amalgamation-3440000.zip”与Precompiled Binaries for Windows中的两项“sqlite-dll-win-x64-3440000.zip”和“sqlite-tools-win-x64-3440000.zip”。下载网址见安装官网[2]。

        SQLite环境配置详见参考资料[3],此步骤是为了生成sqlite的静态库。

(三)tiff下载编译

        本文选择下载tiff-4.6.0(.tar.gz)版本且采用CMake生成项目文件及基于VS2019编译,配置编译好的TIFF库将用于协助PROJ的编译。

        TIFF库编译配置详见参考资料[4],此步骤主要为生成TIFF库的bin、include、lib、share结果文件。

(四)proj下载(最为复杂的部分)

        本文选择下载最新proj-6.1.0版本且采用源代码编译方式(传统方法),PROJ库是一个地理坐标转换库,用以处理不同的地理坐标数据。需要注意的是①PROJ库目前已更新至9.3.0版本,但以7.0.0为分界版本需要对proj-datumgrid packages、proj-data package作区分;②debug、release编译需要具有一致性。

        PROJ库编译配置详见参考资料[3][1],此步骤需要借助CMake并结合SQLite编译配置后的结果文件。配置完成后,自动生成bin、include、lib与share四个文件夹。

        (1)本人在配置过程中,首先尝试对proj-9.3.0版本进行编译配置,但在cmake的configure过程中,总是产生Could NOT find XXX类的报错,Error总是在解决完一个问题之后又持续产生。因此,我选择重新编译配置proj-6.1.0版本。

        (2)除下述修改外,可另外修改CMAKE_INSTALL_PREFIX的值为最后编译配置好结果文件的存储地址。

        (3)针对参考资料[3]而言,通过本文实验发现,只要对应debug或release编译,均可以编译成功。

(五)gdal下载

        本文选择下载gdal-3.5.2(.tar.gz)版本。需要注意的是,在对nmake.opt文件进行修改时,所有修改项都应该删去“#”。

        gdal库编译配置详见参考资料[3][1],此步骤主要为生成TIFF库的bin、include、lib、share结果文件。

(六)VS2019工程依赖设置及测试过程

        本文选择在工程文件的解决方案资源管理器的属性中配置包含目录、库目录以及附加依赖项。

        具体工程文件配置编译详见参考资料[1]。

安装官网:

[1] CMake - Upgrade Your Software Build System

[2] SQLite Download Page

[3] Download — PROJ 9.3.0 documentation

[4] Index of /libtiff/

[5] Download — GDAL documentation

参考资料:

[1] GDAL C++の学习 第一回:编译GDAL - 知乎

[2] CMake Tutorial — CMake 3.28.0-rc5 Documentation

[3] 配置Visual Studio C++环境中GDAL、SQLite与PROJ库的方法 - 知乎

[4] Win11下基于cmake-3.26.3 完美编译 TIFF-4.5.0源码_tiff编译_GIS子枫的博客-CSDN博客

这篇关于VS2019编译安装GDAL(C++)程序库的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/400281

相关文章

Java编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Linux卸载自带jdk并安装新jdk版本的图文教程

《Linux卸载自带jdk并安装新jdk版本的图文教程》在Linux系统中,有时需要卸载预装的OpenJDK并安装特定版本的JDK,例如JDK1.8,所以本文给大家详细介绍了Linux卸载自带jdk并... 目录Ⅰ、卸载自带jdkⅡ、安装新版jdkⅠ、卸载自带jdk1、输入命令查看旧jdkrpm -qa

MySQL Workbench 安装教程(保姆级)

《MySQLWorkbench安装教程(保姆级)》MySQLWorkbench是一款强大的数据库设计和管理工具,本文主要介绍了MySQLWorkbench安装教程,文中通过图文介绍的非常详细,对大... 目录前言:详细步骤:一、检查安装的数据库版本二、在官网下载对应的mysql Workbench版本,要是

C++ 中的 if-constexpr语法和作用

《C++中的if-constexpr语法和作用》if-constexpr语法是C++17引入的新语法特性,也被称为常量if表达式或静态if(staticif),:本文主要介绍C++中的if-c... 目录1 if-constexpr 语法1.1 基本语法1.2 扩展说明1.2.1 条件表达式1.2.2 fa

Linux安装MySQL的教程

《Linux安装MySQL的教程》:本文主要介绍Linux安装MySQL的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux安装mysql1.Mysql官网2.我的存放路径3.解压mysql文件到当前目录4.重命名一下5.创建mysql用户组和用户并修

pip无法安装osgeo失败的问题解决

《pip无法安装osgeo失败的问题解决》本文主要介绍了pip无法安装osgeo失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 进入官方提供的扩展包下载网站寻找版本适配的whl文件注意:要选择cp(python版本)和你py

C++中::SHCreateDirectoryEx函数使用方法

《C++中::SHCreateDirectoryEx函数使用方法》::SHCreateDirectoryEx用于创建多级目录,类似于mkdir-p命令,本文主要介绍了C++中::SHCreateDir... 目录1. 函数原型与依赖项2. 基本使用示例示例 1:创建单层目录示例 2:创建多级目录3. 关键注

C++从序列容器中删除元素的四种方法

《C++从序列容器中删除元素的四种方法》删除元素的方法在序列容器和关联容器之间是非常不同的,在序列容器中,vector和string是最常用的,但这里也会介绍deque和list以供全面了解,尽管在一... 目录一、简介二、移除给定位置的元素三、移除与某个值相等的元素3.1、序列容器vector、deque

C++常见容器获取头元素的方法大全

《C++常见容器获取头元素的方法大全》在C++编程中,容器是存储和管理数据集合的重要工具,不同的容器提供了不同的接口来访问和操作其中的元素,获取容器的头元素(即第一个元素)是常见的操作之一,本文将详细... 目录一、std::vector二、std::list三、std::deque四、std::forwa