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

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;
}

在这里插入图片描述

相关文章:

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

cpp&#xff08;c&#xff09;编译GDAL、PROJ、SQLite3 Sqlite3libtiffcurlprojGDAL Sqlite3 1、下载 Sqlite3 源码、工具、二进制预编译 exe Sqlite3 官网&#xff1a;https://www.sqlite.org/download.html 下载 sqlite-amalgamation-3430200.zipsqlite-dll-win64-x64-3430…...

每日一题(小白)暴力娱乐篇23

由题意得知给我们一串数字&#xff0c;我们每次交换两位&#xff0c;最少交换多少次成功得到有顺序的数组。我们以平常的思维去思考&#xff0c;加入给你一串数字获得最少的交换次数&#xff0c;意味着你的交换后续基本不会变&#xff0c;比如说2 1 3 5 4 中1与2交换后不变&…...

01-Redis-基础

1 redis诞生历程 redis的作者笔名叫做antirez&#xff0c;2008年的时候他做了一个记录网站访问情况的系统&#xff0c;比如每天有多少个用户&#xff0c;多少个页面被浏览&#xff0c;访客的IP、操作系统、浏览器、使用的搜索关键词等等(跟百度统计、CNZZ功能一样)。最开始存储…...

【从零开始学习JVM | 第一篇】快速认识JVM

什么是JVM&#xff1f; JVM--Java虚拟机&#xff0c;它是Java实现平台无关性的基石。 Java程序运行的时候&#xff0c;编译器将Java代码编译为平台无关的Java字节码文件&#xff08;.class&#xff09;&#xff0c;接下来对应平台的JVM对字节码进行运行解释&#xff0c;翻译成…...

使用RabbitMQ实现异步秒杀

搭建RabbitMQ 在虚拟机上用docker搭建RabbitMQ&#xff0c;首先拉取镜像 docker run --privilegedtrue -d -p 5672:5672 -p 15672:15672 --name rabbitmq rabbitmq:management mkdir -p /usr/local/docker/rabbitmq再创建rabbitmq容器&#xff0c;下面的命令已经能够创建之后…...

Spring Boot 配置文件加载优先级全解析

精心整理了最新的面试资料和简历模板&#xff0c;有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Spring Boot 配置文件加载优先级全解析 Spring Boot 的配置文件加载机制是开发者管理不同环境配置的核心功能之一。其通过外部化配置&#xff08;Externaliz…...

解决华硕主板Z890m下载ubuntu20.04后没有以太网问题

问题描述&#xff1a; 华硕主板Z890m下载双系统ubuntu20.04后&#xff0c;发现ubuntu不能打开以太网。 问题原因&#xff1a; 华硕主板的网卡驱动是r8125,而ubuntu20.04的驱动版本是r8169&#xff0c;所以是网卡驱动不匹配造成 解决方案 开机界面按下F2进入BOIS模式&#…...

xLua的Lua调用C#的2,3,4

使用Lua在Unity中创建游戏对象&#xff0c;组件&#xff1a; 相关代码如下&#xff1a; Lua --Lua实例化类 --C# Npc objnew Npc() --通过调用构造函数创建对象 local objCS.Npc() obj.HP100 print(obj.HP) local obj1CS.Npc("admin") print(obj1.Name)--表方法希…...

Debian系统_主板作为路由器_测试局域网设备间网速

Debian系统_主板作为路由器_测试局域网设备间网速 一、360软件测网速 360测出来的网速实际上是宽带的速度&#xff0c;并不是路由器LAN口到电脑这一段的网速 二、使用iperf3 进行双向带宽测试 1、开发板端下载软件 //Debian系统或者/Ubuntu sudo apt update && sudo…...

从 macos 切换到 windows 上安装的工具类软件

起因 用了很多年的macos, 已经习惯了macos上的操作, 期望能在windows上获得类似的体验, 于是花了一些时间来找windows上相对应的软件. 截图软件 snipaste​​​​​​ windows和macos都有的软件, 截图非常好用 文件同步软件 oneDrive: 尝试了不同的同步软件, 还是微软在各…...

JavaScript中通过array.map()实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等,array.map()的使用详解(附实际应用代码)

目录 JavaScript中通过array.map(&#xff09;实现数据转换、创建派生数组、异步数据流处理、复杂API请求、DOM操作、搜索和过滤等&#xff0c;array.map&#xff08;&#xff09;的使用详解&#xff08;附实际应用代码&#xff09; 一、什么时候该使用Array.map()&#xff0…...

去除Mysql表中的空格、回车、换行符和特殊字符

系列文章目录 文章目录 系列文章目录前言一、示例1.sql层面2.java层面 前言 一、示例 1.sql层面 参考 ## 例子1 ## CHAR(10) 表示换行符 ## CHAR(13) 表示回车UPDATE 表名 SET 列名 REPLACE(REPLACE(列名, CHAR(10), ), CHAR(13), )## 例子2 ## 删除字段中的空格、换行符、…...

P9242 [蓝桥杯 2023 省 B] 接龙数列

这道题说要求最少删多少个使剩下的序列是接龙序列&#xff0c;这个问题可以转换为序列中最长的接龙序列是多少&#xff0c;然后用总长度减去最长接龙序列的长度就可以了&#xff0c;在第一个暴力版本的代码中我用了两个for循环求出了所有的接龙序列的长度&#xff0c;但是会超时…...

macos下 ragflow二次开发环境搭建

参考官网链接 https://ragflow.io/docs/dev/launch_ragflow_from_source虚拟环境 git clone https://github.com/infiniflow/ragflow.git cd ragflow/ # if not pipx, please install it at first pip3 install pipxpipx install uv uv sync --python 3.10 --all-extras 安装 …...

SQL优化技术分享:从 321 秒到 0.2 秒的性能飞跃 —— 基于 PawSQL 的 TPCH 查询优化实战

在数据库性能优化领域&#xff0c;TPC-H 测试集是一个经典的基准测试工具&#xff0c;常用于评估数据库系统的查询性能。本文将基于 TPCH 测试集中的第 20个查询&#xff0c;结合 PawSQL 自动化优化工具&#xff0c;详细分析如何通过 SQL 重写和索引设计&#xff0c;将查询性能…...

密码学基础——DES算法

前面的密码学基础——密码学文章中介绍了密码学相关的概念&#xff0c;其中简要地对称密码体制(也叫单钥密码体制、秘密密钥体制&#xff09;进行了解释&#xff0c;我们可以知道单钥体制的加密密钥和解密密钥相同&#xff0c;单钥密码分为流密码和分组密码。 流密码&#xff0…...

在 Linux 终端中轻松设置 Chromium 的 User-Agent:模拟手机模式与自定义浏览体验

在 Linux 系统中&#xff0c;通过终端灵活控制 Chromium 的行为可以大幅提升工作效率。本文将详细介绍如何通过命令行参数和环境变量自定义 Chromium 的 User-Agent&#xff0c;并结合手机模式模拟&#xff0c;实现更灵活的浏览体验。 为什么需要自定义 User-Agent&#xff1f;…...

ChatGPT 4:引领 AI 创作新时代

文章目录 前言一、ChatGPT 4 的技术革新二、AI 文案创作&#xff1a;精准生成与个性化定制三、AI 绘画艺术&#xff1a;从文字到图像的神奇转化四、AI 视频制作&#xff1a;自动化剪辑与创意实现五、知识库与 ChatGPT 4 的深度融合六、全新的变革和机遇七、相关书籍推荐《ChatG…...

http页面的加载过程

HTTP/2 核心概念 1.1 流&#xff08;Stream&#xff09; • 定义&#xff1a;HTTP/2 连接中的逻辑通道&#xff0c;用于传输数据&#xff0c;每个流有唯一标识符&#xff08;Stream ID&#xff09;。 • 特点&#xff1a; ◦ 支持多路复用&#xff08;多个流并行传输&#…...

MySQL【8.0.41版】安装详细教程--无需手动配置环境

一、MySQL 介绍 1. 概述 MySQL 是一个开源的关系型数据库管理系统&#xff0c;由瑞典公司 MySQL AB 开发&#xff0c;现属于 Oracle 旗下。它基于 SQL&#xff08;结构化查询语言&#xff09;进行数据管理&#xff0c;支持多用户、多线程操作&#xff0c;广泛应用于 Web 应用、…...

鸿蒙ArkTS实战:从零打造智能表达式计算器(附状态管理+路由传参核心实现)

还在为组件状态混乱、页面跳转丢参数而头疼&#xff1f; 这篇博客将揭秘如何用鸿蒙ArkTS打造一个漂亮美观的智能计算器&#xff1a; ✅ 输入完整表达式&#xff0c;秒出结果——字符串切割简单计算 ✅ 状态管理黑科技——Provide/Consume 实现跨组件实时响应 ✅ 路由传参实战—…...

【58】编程技巧:单片机编程命名规范

【58】编程技巧&#xff1a;单片机编程命名规范 引言 在大型嵌入式项目开发中&#xff0c;变量和常量的命名混乱会导致代码难以维护。本文系统阐述变量、常量、指针、结构体等命名规范&#xff0c;通过统一规则提升代码可读性与协作效率。目标是帮助开发者建立清晰的命名习惯&…...

Windows 部署项目 apache + mod_wsgi,nginx + waitress

文章目录 1、apache mod_wsgi&#xff0c;nginx waitress两种部署方式的区别2、以nginx waitress为例 有些项目必须部署在windows上&#xff0c;有IIS wfastcgi、apache mod_wsgi&#xff0c;nginx waitress部署方式 1、apache mod_wsgi&#xff0c;nginx waitress两种…...

车辆视频检测器linux版对于密码中包含敏感字符的处理方法

由于密码中含有敏感字符&#xff0c;导致前端页面异常&#xff0c;图标变灰&#xff0c;坐标拾取打不开图像等&#xff0c;主要原因是&#xff1a;密码比较前后不一致&#xff0c;左边是Abc_110&#xff0c;右边是&#xff1a;Abc_110%2B&#xff0c;对于此问题&#xff0c;特别…...

Java服务端开发基石:深入理解Spring IoC与依赖注入 (DI)

今天&#xff0c;我们从现代Java开发&#xff0c;尤其是企业级应用中&#xff0c;几乎无处不在的Spring框架的核心概念开始&#xff1a;控制反转&#xff08;Inversion of Control, IoC&#xff09; 与 依赖注入&#xff08;Dependency Injection, DI&#xff09;。理解它们&am…...

【人工智能】大语言模型多义词解析技术揭秘——以“项目“歧义消解为例

今天田辛老师和小伙伴探讨了一个有趣的多义词问题&#xff0c; 在人工智能技术日新月异的今天&#xff0c;大语言模型&#xff08;LLM&#xff09;对自然语言的理解能力已经达到令人惊叹的水平。大模型到底是如何去区分多义词的&#xff1f; 比如&#xff1a;当用户提到"…...

贪心算法(17)(java)可被三整除的最大整数和

给你一个整数数组 nums&#xff0c;请你找出并返回能被三整除的元素 最大和。 示例 1&#xff1a; 输入&#xff1a;nums [3,6,5,1,8] 输出&#xff1a;18 解释&#xff1a;选出数字 3, 6, 1 和 8&#xff0c;它们的和是 18&#xff08;可被 3 整除的最大和&#xff09;。 …...

qq邮箱群发程序

1.界面设计 1.1 环境配置 在外部工具位置进行配置 1.2 UI界面设计 1.2.1 进入QT的UI设计界面 在pycharm中按顺序点击&#xff0c;进入UI编辑界面&#xff1a; 点击第三步后进入QT的UI设计界面&#xff0c;通过点击按钮进行界面设计&#xff0c;设计后进行保存到当前Pycharm…...

K8S学习之基础七十九:关闭istio功能

关闭istio功能 kubectl get ns --show-labels kubectl label ns default istio-injection-有istio-injectionenabled的命名空间&#xff0c;pod都会开启istio功能 反之&#xff0c;如果要开启istio&#xff0c;在对应命名空间打上该标签即可...

上门预约洗鞋店小程序都具备哪些功能?

现在大家对洗鞋子的清洗条件越来越高&#xff0c;在家里不想去&#xff0c;那就要拿去洗鞋店去洗。如果有的客户没时间去洗鞋店&#xff0c;这个时候&#xff0c;有个洗鞋店小程序就可以进行上门取件&#xff0c;帮助没时间的客户去取需要清洗的鞋子&#xff0c;这样岂不是既帮…...