当前位置: 首页 > news >正文

cpp(c++)win 10编译GDAL、PROJ、SQLite3、curl、libtiff

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_DIRTIFF_LIBRARY_RELEASE,不设置 TIFF_LIBRARY_DEBUG

TIFF 配置完成
在这里插入图片描述

 
2.4 设置 curl

同样,只设置 CURL_INCLUDE_DIRCURL_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;
}

在这里插入图片描述

http://www.dtcms.com/a/121975.html

相关文章:

  • Easysearch VS Opensearch 数据写入与存储性能对比
  • HOW - 实现 useClickOutside 或者 useClickAway
  • 大模型本地部署系列(1) Ollama的安装与配置
  • 神经网络 | 基于脉冲耦合神经网络PCNN图像特征提取与匹配(附matlab代码)
  • 408 计算机网络 知识点记忆(6)
  • Elasticsearch DSL 中的 aggs 聚合分析
  • 数据结构实验3.3:求解迷宫路径问题
  • 西门子S7-1500与S7-200SMART通讯全攻略:从基础配置到远程IO集成
  • SQL注入(SQL Injection)
  • Ollama 与 llama.cpp 深度对比
  • [特殊字符]【高并发实战】Java Socket + 线程池实现高性能文件上传服务器(附完整源码)[特殊字符]
  • 虽然理解git命令,但是我选择vscode插件!
  • Databricks: Why did your cluster disappear?
  • 【UE5】RTS游戏的框选功能+行军线效果实现
  • Spring Boot 3.x 下 Spring Security 的执行流程、核心类和原理详解,结合用户描述的关键点展开说明,并以表格总结
  • WPF 绑定方式举例
  • LabVIEW 图像处理中常见的边缘检测算法
  • 发票真伪查验接口集成攻略-PHP批量查验发票真伪
  • 贪心算法(17)(java)可被三整除的最大整数和
  • [CISSP] [9] 安全漏洞,威胁和对策
  • 视觉分析AI赋能智慧水务多场景应用
  • S32K144的m_data_2地址不够存,重新在LD文件中配置地址区域
  • doxygen自动生成文档,注释容易错位的补充
  • 雷电模拟器过检测技术全解析
  • 使用docker 安装向量数据库Milvus
  • 黑马 SpringAI+DeepSeek 实战:从对话机器人到企业级知识库的大模型开发全攻略
  • <《AI大模型应知应会100篇》第8篇:大模型的知识获取方式及其局限性
  • package.json配置项积累
  • 防火墙介绍
  • SpringMvc的请求-获得请求参数