内容摘要:
本文提供在VS2017环境下配置GDAL库的操作。
目录
一、开发环境
1.语言:C++
2.编程环境:Visual Studio2017
3.GDAL版本:2.4.0
二、安装包
1.Visual Studio2017:
https://pan.baidu.com/s/1XDVBU4H8PrNOMcKTCO7RCg?pwd=622d
提取码:622d
2.GDAL库:GDAL库各版本源代码下载官网:Past Releases — GDAL documentation
本文以下载→编译→安装→配置→添加环境变量为顺序展开介绍。
三、下载GDAL
打开官网,读者可选择自己需要的版本下载。
-
GDAL 2.x 系列: 这是较早版本,但仍然被广泛使用。GDAL 2.2.x 或更新版本通常兼容于Visual Studio 2017。
-
GDAL 3.x 系列: 这是最新的稳定版本,GDAL 3.x 系列引入了许多新特性和改进。大多数3.x版本也支持在Visual Studio 2017下进行编译和使用。
本文以gdal-2.4.0版本为例,下载压缩包,将下载地址修改为自己可以找到的文件路径。
注意:路径要保证全英文无特殊字符,路径名不能太长,否则影响后面的步骤。
解压文件夹,解压至出现名为“gdal-2.4.0”的文件夹,我们称为源文件夹,修改源文件夹名为gdal(简单全英且无符号),将该文件夹移动至接近根目录或根目录的位置,本文路径为D:\gdal。
找到D:\gdal中的nmake.opt文件,用记事本或VS2017打开该文件。
修改文件中以下位置:
- 41行:MSVC_VER=1910(1400对应VS2010、1800对应VS2013、1900对应VS2015、1910对应VS2017、1921对应VS2019)
- 57行:GDAL_HOME = "D:\gdal\240"(这个是要将编译好的库文件保存的位置,可以根据自己的需要保存到其他位置,本文设置路径为D:\gdal\240)
- 191行:# WIN64=YES去掉#,修改为WIN64=YES( gdal2.3.x是在184行去掉# )
修改完成后Ctrl+S保存文件。
四、编译GDAL
在Windows的输入框中搜索“适用于VS2017的X64的本机工具命令提示”或“x64 Native Tools Command Prompt for VS 2017”,以管理员身份运行。
注意:一定要以管理员身份运行!!!
输入D:,回车。
输入cd D:\gdal(刚刚修改的源文件夹路径,本文路径为D:\gdal),回车。
如下图所示。
接着输入nmake /f makefile.vc,如下图所示。回车,几分钟后编译完成。
五、安装GDAL
编译完成后,先后输入nmake /f makefile.vc install、nmake /f makefile.vc devinstall两条命令,将编译生成的bin、include等放到GADL_HOME所在的文件下。
编译成功后可以看到D:\gdal\240路径下有这些文件夹。
六、配置GDAL
打开VS2017,新建C++项目,点击视图→属性管理器。
找到Microsoft.Cpp.x64,user,右键属性,打开属性页。
在属性页的通用属性中选择VC++目录,设置包含目录和库目录,点击包含目录→编辑。
在包含目录添加D:\gdal\240\include
在库目录中添加D:\gdal\240\lib
点击链接器→输入→附加依赖项,手动输入gdal_i.lib 。
点击确定,完成配置。
七、添加环境变量
点击计算机→属性→高级系统设置→环境变量,选择系统变量内的path,在其中新建D:\gdal\240\bin,点击确定。
八、测试
输入以下代码,运行时选择Debug X64,若能够成功输出图片的尺寸,则环境配置成功。
#include "gdal_priv.h"
#include<iostream>
using namespace std;
int main()
{
const char* pszFile;
GDALAllRegister();
pszFile = "D:\添加你的图片.jpg";//在此处添加你的图片地址
GDALDataset *poDataset = (GDALDataset*)GDALOpen(pszFile, GA_ReadOnly);
GDALRasterBand *poBand = poDataset->GetRasterBand(1);
int xsize = poBand->GetXSize();
int ysize = poBand->GetYSize();
cout << xsize << endl;
cout << ysize << endl;
system("pause");
return 0;
}
欢迎交流🌹🌹
参考文章: