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

news2025/4/15 6:55:57

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.coloradmin.cn/o/2331903.html

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

相关文章

每日一题(小白)暴力娱乐篇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;下面的命令已经能够创建之后…

解决华硕主板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…

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

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 实现跨组件实时响应 ✅ 路由传参实战—…

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;这样岂不是既帮…

蓝桥杯——走迷宫(Java-BFS)

这是一个经典的BFS算法 1. BFS算法保证最短路径 核心机制&#xff1a;广度优先搜索按层遍历所有可能的路径&#xff0c;首次到达终点的路径长度即为最短步数。这是BFS的核心优势。队列的作用&#xff1a;通过队列按先进先出的顺序处理节点&#xff0c;确保每一步探索的都是当…

下载firefox.tar.xz后如何将其加入到Gnome启动器

起因&#xff1a;近期&#xff08;2025-04-07&#xff09;发现firefox公布了130.0 版本&#xff0c;可以对pdf文档进行签名了&#xff0c;想试一下&#xff0c;所以卸载了我的Debian12上的firefox-esr,直接下载了新版本的tar.xz 包。 经过一番摸索&#xff0c;实现了将其加入Gn…