cpp(c++)编译GDAL、PROJ、SQLite3
- Sqlite3
- libtiff
- curl
- proj
- GDAL
Sqlite3
1、下载 Sqlite3 源码、工具、二进制预编译 exe
Sqlite3 官网:https://www.sqlite.org/download.html
下载
- sqlite-amalgamation-3430200.zip
- sqlite-dll-win64-x64-3430200.zip
- sqlite-tools-win32-x86-3430200.zip
2、创建空的 C++ 项目(此处我用 Visual Studio 2019)
项目名:Sqlite3
3、复制 Sqlite 源码到空项目下
- sqlite-amalgamation-3430200
- shell.c
- sqlite3.c
- sqlite3.h
- sqlite3ext.h
- sqlite-dll-win64-x64-3430200
- sqlite3.def
4、将代码添加到项目中
5、编译静态库
- 配置 — 常规
- 输出目录
- 中间目录
- 配置类型 —— 静态库
- C++ — 代码生成
- 运行库 —— 多线程(/MT)
输出目录:$(SolutionDir)$(Platform)\$(Configuration)\
中间目录:$(Platform)\$(Configuration)\
5.1 编译静态库(切换到 Release、x64)
5.2 进入编译的结果目录,创建 “lib” 目录,并将编译出的静态库放入
6、编译动态库
- 配置 — 常规
- 配置类型 — 动态库
- C/C++
- 预处理器
- 预处理器定义 — 替换为如下内容
- 代码生成 — 多线程DLL(/MD)
- 链接器
- 输入
- 模块定义文件 — sqlite3.def 的全路径
_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY
SQLITE_ENABLE_DESERIALIZE
SQLITE_ENABLE_PREUPDATE_HOOK
SQLITE_ENABLE_SESSION
SQLITE_ENABLE_FTS3
6.1 设置库类型
6.2 设置预处理器
6.3 代码生成设置
6.4 模块定义文件
6.5 修改 sqlite3.def,添加如下内容
sqlite3_unlock_notify
6.6 Release、x64 下编译动态库
7、在 x64/Release 目录下创建 bin 目录,并将下载的 sqlite3 的二进制 sqlite3.exe 放入
libtiff
1、下载 libtiff 源码
下载地址:https://download.osgeo.org/libtiff/
此处下载最新版 4.6.0rc2
2、CMake 构建项目,修改 prefix 目录
3、Release、x64 编译项目
curl
1、下载 curl 源码
下载源码:https://curl.se/download/
2、CMake 构建项目,修改 prefix 目录
3、Release、x64 编译项目
proj
1、下载 curl 源码
下载源码:https://proj.org/en/9.3/download.html
构建项目时,会从 github 下载 googletest 项目,对网络会有所要求
2、CMake 构建项目
构建过程中会报错提示 “Sqlite” 未找到
2.1 设置安装的目录
2.2 设置 Sqlite 相关参数,原始如下
从上到下分别设置 sqlite3.exe、sqlite3 include 目录、sqlite3 编译的静态库
2.3 设置 LibTIFF 相关参数,原始如下
这里只设置
TIFF_INCLUDE_DIR
和TIFF_LIBRARY_RELEASE
,不设置TIFF_LIBRARY_DEBUG
TIFF 配置完成
2.4 设置 curl
同样,只设置
CURL_INCLUDE_DIR
和CURL_LIBRARY_RELEASE
CURL_INCLUDE_DIR
设置到 include 这一步就可以,不要进入到其内部的 curl 目录
3、Release、x64 编译项目
GDAL
1、下载 gdal 源码
下载地址:https://gdal.org/download.html
2、CMake 生成工程
设置安装目录
设置 proj 的 include、release library
设置 sqlite3(此处我没设置,需要安装了 rtree 等空间扩展的 sqlite)
设置 tiff
设置 curl
3、以 release、x64 编译 gdal
此处不需要把 gdal 改成静态库,直接使用默认设置生成即可
4、以 release、x64 编译 gdal
5、创建新工程,测试 gdal 是否可用
更改代码中的 tiff 数据,并运行程序
#include <gdal.h>
#include <string>
#include <gdal_priv.h>
#include <iostream>void readReaster(std::string inRaster)
{//注册所有的驱动 GDALAllRegister();//GDAL数据集 GDALDataset* dataset;dataset = (GDALDataset*)GDALOpen(inRaster.c_str(), GA_ReadOnly);if (dataset == NULL){std::cout << "Failed in open files!!!" << std::endl;throw;}// 获取数据行列数 int nRows = dataset->GetRasterYSize();int nCols = dataset->GetRasterXSize();std::cout << "Rows: " << nRows << ", Cols: " << nCols << std::endl;//获取投影信息std::string srs = dataset->GetProjectionRef();std::cout << "SRS: " << srs << std::endl;//获取波段 GDALRasterBand* band;band = dataset->GetRasterBand(1);
}int main()
{std::string inRaster = "E:\\Datas\\GDAL_Test\\raster\\DEM_SH_WGS84_Resample1.tif";readReaster(inRaster);return 0;
}