VS2022配置GDAL

GDAL(Geospatial Data Abstraction Library)是一个用于处理地理空间数据的开源库。它提供了一组功能丰富的API,用于读取、写入、转换和处理各种地理空间数据格式,包括栅格数据(如卫星图像、数字高程模型)和矢量数据(如矢量地图、矢量数据集)等。GDAL是由Open Source Geospatial Foundation(OSGeo)维护和发展的。

GDAL支持多种常见的地理空间数据格式,包括但不限于:TIFF、JPEG、PNG、HDF、NetCDF、GeoTIFF、Shapefile、FileGDB、SpatiaLite、PostGIS等。它提供了对这些数据格式的读取、写入和转换功能,可以在不同的地理空间数据之间进行格式转换、投影变换、数据子集提取等操作。

GDAL广泛应用于地理信息系统(GIS)、遥感图像处理、地理空间数据处理、地球科学、环境科学等领域。通过GDAL的API,开发者可以在各种编程语言(如C++、Python、Java等)中进行地理空间数据的处理和分析,从而实现地理空间数据的读取、处理、分析和可视化等功能。

需要注意的是,GDAL是一个专注于地理空间数据处理的库,与OpenGL这种图形渲染库在功能和应用领域上有所不同。GDAL主要用于处理地理空间数据的读取、写入和转换等操作,而OpenGL则专注于图形渲染和可视化。两者可以结合使用,例如使用GDAL加载地理空间数据,并将其转换为OpenGL纹理对象,然后使用OpenGL进行地理空间数据的可视化和渲染。

一般来讲,GDAL可以与OpenGL配合使用。GDAL负责读取和处理影像,OpenGL负责渲染影像。

VS2022配置OpenGL+Glad的教程可以参考我的这篇博客(Glad是一个用于管理和加载OpenGL函数指针的C/C++库。它可以生成用于加载OpenGL函数的代码,从而允许开发者在OpenGL应用程序中使用最新的OpenGL功能。Glad提供了简单的、跨平台的方法来加载和管理OpenGL函数指针,以便开发者可以方便地使用OpenGL的各种功能)。

VS2022配置OpenGL+GALD_程序员班长的博客-CSDN博客

一、事先说明

(一)配置的环境

Visual Studio 2022

SQLite----3410200

TIFF----4.5.0

PROJ----9.2.0

GDAL----3.5.3

我这里配置的是Debug版本的环境。

在 GDAL 3 之后,配置 GDAL 之前需要先配置 SQLite 和 PROJ 库,因为 GDAL 在其 3.0 版本之后引入了对 SQLite 和 PROJ 的依赖。

  1. SQLite 是一种嵌入式数据库,广泛用于移动应用和嵌入式系统中。GDAL 3 之后开始使用 SQLite 作为默认的虚拟文件系统(Virtual File System,VFS),用于支持对 SQLite 数据库的读取和写入。配置 SQLite 库后,可以确保 GDAL 正确地使用 SQLite VFS,从而支持从 SQLite 数据库中读取数据集。

  2. PROJ 是一个开源的地理空间坐标参考系统库,用于处理地理坐标的投影、转换和坐标系转换等操作。GDAL 3 之后引入了对 PROJ 库的强制依赖,以支持在 GDAL 中进行地理空间坐标的投影和转换操作。配置 PROJ 库后,可以确保 GDAL 正确地使用 PROJ 库进行地理坐标的处理。

在配置 GDAL 时,需要先安装和配置 SQLite 和 PROJ 库,以满足 GDAL 对它们的依赖要求。这可以确保 GDAL 在运行时能够正确地访问和使用 SQLite 和 PROJ 功能,以支持地理空间数据的读取、处理和转换等操作。

二、具体配置

(一)SQLite配置

首先,我们进入SQLite官方下载网站https://www.sqlite.org/download.html),并下载“Source Code”中的第一项sqlite-amalgamation-3410200.zip,以及“Precompiled Binaries for Windows”中的第二项sqlite-dll-win64-x64-3410200.zip与第三项sqlite-tools-win32-x86-3410200.zip,一共是三个文件,如下图所示。这里需要注意,随着SQLite版本的更新,上述三个文件名称最后面的一长串数字会随着改变,大家只需要对照好文件名称前面的字样即可。

随后,将上述下载好的三个压缩包文件解压到同一个文件夹下,我的文件夹是C:\GDAL\SQLite。

 随后,打开Visual Studio 2022,新建一个空项目。

随后,分别在“头文件”与“源文件”处右键,通过“添加”→“现有项...”的方法,将刚刚解压缩得到文件中的C:\GDAL\SQLite\sqlite-amalgamation-3410200\sqlite3.h与C:\GDAL\SQLite\sqlite-amalgamation-3410200\sqlite3ext.h文件放入“头文件”,并将C:\GDAL\SQLite\sqlite-amalgamation-3410200\sqlite3.c与C:\GDAL\SQLite\sqlite3.def文件放入“源文件”。

添加后结果如图所示

接下来,接下来,选中项目名称MySQLite,先在上方的“配置”与“平台”中将二者选择为“所有配置”与“所有平台”。在“C/C++”→“预处理器”中,右侧设置“预处理器定义”,点击“编辑”
填入如下代码

_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY

 接下来,在“链接器”→“输入”,在右侧配置“模块定义文件”。

找到刚刚解压缩得到的C:\GDAL\SQLite\sqlite3.def文件,按下Shift按钮并右键,选择“复制文件地址”,将其粘贴至“模块定义文件”中。

 之后打开sqlite3.def文件,在其最后一行添加如下的代码。

sqlite3_unlock_notify

 然后选择“属性”→“配置属性”→“常规”,在右侧选择“配置类型”,将其选择为静态库(.lib)。(注意:改成.lib后左侧窗口的链接器会消失)

然后,点击“生成”---“生成解决方案”。(如果你需要Release版本的就在上方切换成Release,我这里是Debug版本)

 可以看到,在Debug文件夹下面多出来三个文件

 此时,在前面提到的SQLite环境所下载的三个压缩包文件解压后所存放的文件夹中,我们新建三个文件夹,分别命名为includelibbin

 随后,首先在刚刚生成的项目的x64\Debug文件夹中,找到MySQLite.lib文件。这里如果大家刚刚生成的是Release版本的项目,那么就是在x64\Release文件夹中。

随后,将其复制到刚刚新建的lib文件夹中。

然后, 将sqlite-amalgamation-3410200文件夹中的sqlite3.hsqlite3ext.h文件复制。

 将其粘贴至刚刚新建立的include文件夹中。

 随后,将sqlite-tools-win32-x86-3410200文件夹中的sqlite3.exe文件复制。

 粘贴至刚刚新建立的bin文件夹中。

SQLite环境就配置完成了。 

(二)CMake配置

接下来,我们开始对CMake软件进行配置。CMake软件是一个跨平台的编译软件,在后期进行PROJ库配置时需要用到。

首先,我们还是在其官方下载网站https://cmake.org/download/)进行软件的下载。这里我们下载其“Binary distributions”中的第一项即可。



安装的过程记得将CMake添加到环境变量,其他选项默认即可。

 

 安装完毕即可。

(三)PROJ配置

1.配置PROJ库

接下来,我们开始PROJ库的配置。PROJ库是一个地理坐标转换库,用以处理不同的地理坐标数据;因为我们要安装的GDAL库是一个地理数据处理库,因此其固然需要PROJ这一地理坐标转换库来完成各项地理数据操作。

首先,我们在PROJ库的官方下载网站https://proj.org/download.html)中下载其源代码。

 下载的时候注意不要点击到后面的md5,否则下载的文件是.md5结尾的

随后,将下载后的压缩包解压,并在解压后得到的文件夹中新建立一个build文件夹。

 接下来,打开我们刚刚安装好的CMake软件,并点击Browse Source选择我们的proj根目录,然后点击Browse Build,选择我们新建的build文件夹。随后,点击“Configue

 

 然后选择VS版本,我这里是2022;第二个选项选择处理器的架构(默认是AMD64,即x64),然后点击finish。

 第一次运行会满屏红色错误

接下来,在CMAKE_INSTALL_PREFIX中,配置一个我们后期将要存放PROJ库的路径,我的路径是C:\GDAL;接下来的三个数据,我们分别选择前面配置SQLite环境时,所得到的bin文件夹中的sqlite3.exe文件、include文件夹与MySQLite.lib文件的路径。具体配置如下图所示。

 

 但是还是有错误提示!

查了下官方文档,这是官方的要求

 但是查阅了一下,GDAL 库通常已经包含了对 libtiff 的依赖,并提供了对 TIFF 图像文件的支持。

GDAL 是一个功能强大的地理数据处理库,提供了对多种栅格和矢量地理数据格式的支持,包括 TIFF、JPEG、PNG 等常见格式。当安装了 GDAL 后,通常会自动包含对 libtiff 的依赖,并且可以通过 GDAL 的 API 接口直接读取和处理 TIFF 图像文件,而不需要单独安装 libtiff 库。因此,我们可以点击Advanced,ENABLE_TIFF取消勾选。

但是,防止在使用 GDAL 和 OpenGL 过程中遇到了与 TIFF 图像文件相关的问题,例如无法读取或处理 TIFF 文件,可能需要检查 GDAL 和 OpenGL 配置,并确保其包含了对 libtiff 的正确依赖。如果在某些情况下,可能需要单独安装 libtiff 库就麻烦了,还是现在安装了比较好。

2.配置TIFF

下载最新版的libtiff库,然后解压

下载地址:Index of /libtiff/

 然后打开CMake-gui,源码目录选择解压后的目录,并指定生成目录

点击Configure,选择对应的vs版本,其它选项不用修改,完成后最下方提示Configuring done。

 然后点击Generate,提示Generating done。

 关闭CMake-gui。

以管理员身份打开VS2022,打开项目,选择刚才在build目录生成的tiff.sln文件。

先生成ALL_BUILD

成功。

再生成INSTALL(注意:如果以非管理员打开VS2022,这一步会报错)。

 成功生成到C盘。

3.继续配置PROJ库 

 再次打开CMake-gui,再次编译PROJ库,点击Advanced,把TIFF_INCLUDE_DIRTIFF_LIBRARY_DEBUG补上,再次点击Configure,这时又报出“Could NOT find CURL”的错误。

 把ENABLE_CURL取消勾选,再次点击Configure

 又发出错误提示:projsync requires Curl

 

 然后取消勾选“BUILD_PROJSYNC”,再次点击Configure

 成功。

 点击Generate,成功

这时可以关闭CMake-gui了。

在开始菜单中找到位于Visual Studio 2022软件下的“x64 Native Tools Command Prompt for VS 2022”软件,点击打开。

进入到PROJ的build目录。

执行命令

msbuild ALL_BUILD.vcxproj /p:Configuration="Release"

如果需要编译Debug版本的库,将Release修改为Debug即可。

但是,推荐选择Release,为什么呢?

因为如果选择了Debug,那么再下一步执行"msbuild INSTALL.vcxproj /p:Configuration="Debug",不管是Debug还是Release,都会产生错误。

而且,即使选择的是Release,在Visual Studio软件中无论是Release模式还是Debug模式,都可以成功调用配置好的Release版本的GDAL库。

成功后会显示0个错误,警告的出现并不影响。

 继续输入以下代码。

msbuild INSTALL.vcxproj /p:Configuration="Release"

成功。

此时,前面提到我们在CMake软件中设置了CMAKE_INSTALL_PREFIX所对应的文件夹路径,我的路径是C:\GDAL

在这个路径中,此时我们可以看到其已经自动生成了binincludelibshare四个文件夹。

 

这就完成了PROJ库的配置。

(四)GDAL配置

首先,依然是在其官方下载网站https://gdal.org/download.html)中进行源代码的下载。

也可以去github下载:Releases · OSGeo/gdal · GitHub

这里下载3.5.3版本,因为在此之后的版本中没有nmake.opt文件,配置起来比较麻烦。

然后解压。

随后,找到其中的nmake.opt文件,并用能够打开文本的软件打开(Visual Studio软件也可以)。

随后,在其42行左右(具体行数可能会随着GDAL库版本的不同而不同)的位置,将等号后的数字修改为自己Visual Studio软件的_MSC_VER值。如果大家不知道自己Visual Studio软件的这一个值是多少,可以参考文章Visual Studio软件_MSC_VER数值(MSVC编译器版本)的获取

接下来,在66行左右的位置,将这一路径设置为自己希望编译后GDAL库存放的路径。

随后,在130行左右的位置,如果大家需要编译的是Debug版本的GDAL库,则将等号后的数字修改为1即可;需要编译的是Release版本的GDAL库,就不用修改。

随后,在213行左右的位置,如果我们的电脑是64位的Windows系统,就将这一行的注释取消掉即可。

接下来,在245行左右的位置,如果需要动态编译就不用修改,如果需要静态编译就将等号后的数字修改为0。一般我们选择静态编译即可,因此将其修改为0

接下来,在265行左右,需要我们配置PROJ库的一些路径。

其中,第265行是前面我们在CMake软件中设置了CMAKE_INSTALL_PREFIX所对应的文件夹路径下,include文件夹的路径;第269行是这一文件夹中,lib文件夹中proj.lib文件的路径。配置成功如下图所示。

最后,在638行左右,需要我们配置SQLite环境的一些路径。原配置如下。

其中,这里所涉及的文件夹,是前面提到的下载的SQLite压缩包文件解压后所存放的文件夹中,我们新建的、分别命名为includelibbin的那三个文件夹。其中,将include文件夹的路径放在第一个位置,将lib文件夹中的MySQLite.lib文件的路径放在第二个位置。

配置完毕如图所示,如果你不需要使用SQLite,就可以保留注释。

 随后,保存当前nmake.opt文件,并再一次打开“x64 Native Tools Command Prompt for VS 2022”软件,cd进入刚刚解压得到的GDAL库文件夹(也就是nmake.opt文件所在的那个文件夹,这一文件夹下还有一个名为makefile.vc的文件,如下图所示)。

 

如果需要的是Debug版本的GDAL库,直接分别输入并运行以下三句代码即可。

nmake /f makefile.vc WIN64=YES DEBUG=1
nmake /f makefile.vc install
nmake /f makefile.vc devinstall

 ​结果分别如下图所示。

 

 

 如果需要的是Release版本的GDAL库,那么分别输入并运行以下两句代码即可。

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

此时,在我们刚刚于nmake.opt文件66行左右处所设定的GDAL库存放路径中,可以看到已经自动生成了相关的文件夹,如下图所示。

 GDAL配置完成。

三、效果测试

新建一个C++的空项目,在源文件右键---添加---新建项。新建一个C++源文件,我这里新建的文件名为main.cpp。

在main.cpp中添加如下代码。

#include <iostream>
#include <gdal.h>
#include <gdal_priv.h>
using namespace std;

int main() {
    GDALDataset* poDataset;
    GDALAllRegister();
    poDataset = (GDALDataset*)GDALOpen("pic.tif", GA_ReadOnly);
    if (poDataset == NULL)
    {
        cout << "找不到文件,但说明GDAL可以用了";
    }
    return 0;
}

然后我们还需要把GDAL库导入一下。

首先,在项目名称那右键点击属性,然后点击C/C++下面的常规,在右侧的包含附加目录点击编辑(我这里已经编辑好了)。

 把之前在nmake.opt的第66行设置的GDAL库目录下面的include文件夹所在路径填进来

 

 然后点击链接器---常规---附加库目录进行编辑。

把之前在nmake.opt的第66行设置的GDAL库目录下面的lib文件夹所在路径填进来 

 

 然后点击链接器---输入---附加依赖项,进行编辑

把之前在nmake.opt的第66行设置的GDAL库目录下面的lib文件夹下的gdal.lib文件所在路径添加进来(可以把鼠标光标放在gdal.lib文件,然后按shift+鼠标右键,然后松开,再按A键快速复制文件路径)。

 

 然后确定保存即可。

点击本地Windows调试器,编译运行此代码。

 但是不出意外的话又要出意外了。 

 对于此错误,我们需要把刚刚于nmake.opt文件66行左右处所设定的GDAL库存放路径中的bin文件夹,分别放于系统变量的PATH中,然后重启电脑。

为什么要放到系统变量的PATH中呢?放到用户变量的PATH中可以吗?答案是当然可以。区别在于,对于普通变量,用户变量的优先级大于系统变量;如果变量名相同,则用户变量中的内容会替换掉系统变量中的内容。

但是对于PATH,系统变量的优先级要大于用户变量。

还有一个区别是,用户变量只对当前登录的用户有效(换言之,如果换一个账户登录这台电脑就用不了其他账户设置的用户变量),而系统变量是对所有用户都有效!

详情可参考这三篇文章

VS环境下,关于“找不到 **.dll,无法执行代码,重新安装程序可能会解决此问题。”的四种解决方案_找不到emp.dll,无法继续执行代码_Vete.的博客-CSDN博客

 windows下用户变量和系统变量的优先级_系统变量和用户变量优先级_SJ2050的博客-CSDN博客

Windows 10 / 11 环境变量 (用户变量与系统变量)_Yongqiang Cheng的博客-CSDN博客

最后设置完毕的结果是这样的。

 然后重启电脑。

打开VS2022,继续运行刚才新建的项目。

又提示这个错误,唉。。。。 

 照葫芦画瓢,把tiffd.dll的存放路径也添加到系统变量的PATH中。(在上面配置LIBTIFF的时候,生成INSTALL完毕后可以看到在C盘的Program Files(x86)下生成了tiff文件夹)

 然后确定保存,重启电脑。

再次运行上面新建的项目。

 成功。

GDAL这就配置完成啦。

参考文章

GDAL库在Visual Studio C++环境中的配置 - 简书

windows下编译proj库_proj编译_lxmeng的博客-CSDN博客

WIN10 VS2019下编译GDAL3.0+PROJ6+SQLite_win安装proj6_Zzzxs-的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/KK_2018/article/details/130292595