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.mzph.cn/diannao/77333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【愚公系列】《高效使用DeepSeek》062-图书库存管理

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…

链表算法中常用操作和技巧

目 1.常用技巧 1.1.画图 1.2.添加虚拟头节点 1.3.大胆引入中间变量 1.4.快慢双指针 1.4.1判断链表是否有环 1.4.2找链表中环的入口 ​2.常用操作 2.1. 创建一个新节点 2.2.尾插 2.3.头插 1.常用技巧 1.1.画图 画图可以让一些抽象的文字语言更加形象生动 画图&#…

【9】数据结构的串篇章

目录标题 串的定义顺序串的实现初始化赋值打印串求串的长度复制串判断两个串长度是否相等连接两个串比较两个串内容是否相等插入操作删除操作调试与代码合集 串的模式匹配算法朴素的模式匹配算法KMP算法实现模式匹配 串的定义 定义&#xff1a;由0个或多个字符组成的有限序列&…

GMSL Strapping Pins CFG0/CFG1 应用

GMSL device 使用起来还是比较简单 ADI 已经充分考虑了用户的需求&#xff0c;尽可能的降低的芯片的使用和配置复杂度 一对加串器和解串器&#xff0c;只要工作模式匹配得当&#xff0c;Link Locked&#xff0c;便能够正常工作 如果遇到 Link 无法建立&#xff08;Locked&…

`uia.WindowControl` 是什么:获取窗口文字是基于系统的 UI 自动化接口,而非 OCR 方式

uia.WindowControl 是什么:获取窗口文字是基于系统的 UI 自动化接口,而非 OCR 方式 uia.WindowControl 通常是基于 Windows 系统的 UI 自动化框架(如 pywinauto 中的 uia 模块)里用于表示窗口控件的类。在 Windows 操作系统中,每个应用程序的窗口都可以看作是一个控件,ui…

Easysearch VS Opensearch 数据写入与存储性能对比

本文记录 Easysearch 和 Opensearch 数据写入和数据存储方面的性能对比。 准备 压测工具&#xff1a;INFINI Loadgen 对比版本&#xff1a; Easysearch 1.11.1&#xff08;lucene 8.11.4&#xff09;Opensearch 2.19.1&#xff08;lucene 9.12.1&#xff09; 节点 JVM 配置…

力扣题解:142. 环形链表 II

在链表学习中&#xff0c;我们已经了解了单链表和双链表&#xff0c;两者的最后一个结点都会指向NULL&#xff1b;今天我们介绍的循环列表则不同&#xff0c;其末尾结点指向的这是链表中的一个结点。 循环链表是一种特殊类型的链表&#xff0c;其尾节点的指针指向头节点&#…

区间 dp 系列 题解

1.洛谷 P4342 IOI1998 Polygon 我的博客 2.洛谷 P4290 HAOI2008 玩具取名 题意 某人有一套玩具&#xff0c;并想法给玩具命名。首先他选择 W, I, N, G 四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好&#xff0c;将名字中任意一个字母用 W, I, N, G …

天基光学图像仿真原理简介

一、原理简介 天基光学图像仿真通过数学模型和算法模拟空间目标在光学系统中的成像过程&#xff0c;核心原理可归纳为以下四部分&#xff1a; 1. 目标与背景建模‌ 目标运动建模‌&#xff1a;利用轨道动力学模型&#xff08;如SGP4&#xff09;解析空间目标轨迹&#xff0c;…

Jetpack Compose 状态保存机制全面解析:让UI状态持久化

在Android开发中&#xff0c;Jetpack Compose 的状态管理是一个核心话题&#xff0c;而状态保存则是确保良好用户体验的关键。本文将深入探讨Compose中各种状态保存技术&#xff0c;帮助你在配置变更和进程重建时保持UI状态。 一、基础保存&#xff1a;rememberSaveable reme…

【Json-Rpc #1】项目背景及环境搭建

&#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人博客&#xff1a;island ⛺️ 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1f3fd;留言 &#x1f60d;收藏 &#x1f49e; &#x1f49e; &#x1f49e; 生活总是不会一帆风顺&#xff0c;前进…

WPF轮播图动画交互 动画缩放展示图片

WPF轮播图动画交互 动画缩放展示图片 效果如下图&#xff1a; XAML代码&#xff1a; <Window x:Class"Caroursel.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/20…

为什么 npm list -g 没显示 node_modules?✨

揭秘&#xff1a;为什么 npm list -g 没显示 node_modules&#xff1f;&#x1f575;️‍♂️✨ 嗨&#xff0c;各位代码探险家&#xff01;&#x1f44b; 今天我们要破解一个 npm 小谜团&#xff1a;运行 npm list -g --depth0 时&#xff0c;为什么输出的路径里看不到 node_…

都江堰与郑国渠

目录标题 一、历史背景&#xff1a;地缘博弈下的水利突围都江堰&#xff1a;化水患为天府的千年大计郑国渠&#xff1a;间谍引发的战略反转 二、工程智慧&#xff1a;超越时代的科技奇迹都江堰&#xff1a;生态治水的典范郑国渠&#xff1a;泥沙资源化的创举 三、后世影响&…

链路聚合+vrrp

1.链路聚合 作用注意事项将多个物理接口&#xff08;线路&#xff09;逻辑上绑定在一起形成一条逻辑链路&#xff0c;起到叠加带宽的作用1.聚合接口必须转发速率一致。2.聚合设备两端必须一致 配置命令 方法一 [Huawei]interface Eth-Trunk 0----先创建聚合接口&#xff0c;…

【STM32单片机】#7 定时器输入捕获

主要参考学习资料&#xff1a; B站江协科技 STM32入门教程-2023版 细致讲解 中文字幕 开发资料下载链接&#xff1a;https://pan.baidu.com/s/1h_UjuQKDX9IpP-U1Effbsw?pwddspb 单片机套装&#xff1a;STM32F103C8T6开发板单片机C6T6核心板 实验板最小系统板套件科协 实验&…

【android bluetooth 框架分析 01】【关键线程 3】【bt_jni_thread 线程介绍】

1. bt_jni_thread 职责介绍 bt_jni_thread 这个线程的作用是专门负责处理蓝牙 JNI 层的消息循环&#xff0c;也可以说是 C 层和 Java 层交互的桥梁线程。 1.1 什么是 JNI 层&#xff1f;为什么需要这个线程&#xff1f; JNI&#xff08;Java Native Interface&#xff09;是 …

基于视觉语言模型的机器人实时探索系统!ClipRover:移动机器人零样本视觉语言探索和目标发现

作者&#xff1a;Yuxuan Zhang 1 ^{1} 1, Adnan Abdullah 2 ^{2} 2, Sanjeev J. Koppal 3 ^{3} 3, and Md Jahidul Islam 4 ^{4} 4单位&#xff1a; 2 , 4 ^{2,4} 2,4佛罗里达大学电气与计算机工程系RoboPI实验室&#xff0c; 1 , 3 ^{1,3} 1,3佛罗里达大学电气与计算机工程系F…

SpringBoot和微服务学习记录Day2

微服务 微服务将单体应用分割成更小的的独立服务&#xff0c;部署在不同的服务器上。服务间的关联通过暴露的api接口来实现 优点&#xff1a;高内聚低耦合&#xff0c;一个模块有问题不影响整个应用&#xff0c;增加可靠性&#xff0c;更新技术方便 缺点&#xff1a;增加运维…

网站集群批量管理-Ansible剧本与变量

复盘内容&#xff1a;链接指北 查看ansible命令文档 ansible-doc -s systemd一、剧本 何为剧本: playbook 文件,用于长久保存并且实现批量管理,维护,部署的文件. 类似于脚本存放命令和变量 剧本yaml格式,yaml格式的文件:空格,冒号. 剧本未来我们批量管理,运维必会的内容. …