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

Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1

Rust-GDAL 是 Rust 语言的 GDAL(Geospatial Data Abstraction Library) 绑定库,用于处理地理数据。由于 GDAL 依赖较多,在 Windows 上的安装相对复杂,本文档将介绍如何安装 GDAL 并配置 Rust-GDAL 的开发环境。

1. 检查 Rust 版本

首先,确认当前 Windows 系统上安装的 Rust 版本及工具链类型。可以使用 rustup show 命令查询:

rustup show

如果输出如下:

stable-x86_64-pc-windows-gnu
stable-x86_64-pc-windows-msvc

表示你的 Rust 版本支持 GNU 工具链MSVC 工具链。Rust 在 Windows 上有两个主要的工具链:

  1. **stable-x86_64-pc-windows-gnu**(GNU 工具链)
    • 使用 MinGW-w64(GNU 编译器集合 GCC) 进行编译。
    • 需要 MinGW-w64 作为编译环境(可能需要手动安装)。
    • 适用于开源生态的环境,不依赖 Microsoft 的工具链。
  2. **stable-x86_64-pc-windows-msvc**(MSVC 工具链)
    • 使用 Microsoft Visual C++(MSVC) 进行编译。
    • 依赖 Visual Studio Build Tools(可通过 rustup 自动安装)。
    • 适用于 Windows 原生环境,通常与 Windows API 兼容性更好,例如 DirectX、.NET

2. stable-x86_64-pc-windows-gnu 用户安装步骤

如果你选择 GNU 工具链,需要安装 MSYS2 及相关工具。

2.1 安装 MSYS2

  1. 下载 MSYS2 安装程序:MSYS2 官网
    或直接下载最新版(2024-12-08):
    MSYS2 64-bit 安装程序
  2. 运行安装程序,需要 Windows 10 及以上的 64 位系统
  3. 选择安装目录(推荐选择无空格、无特殊字符的路径,不要使用网络驱动器)。可以设置其他盘符。

  1. 完成安装后,点击 Finish

  1. 启动 MSYS2 UCRT64 终端(MSYS2 提供多个终端,如 MINGW64CLANG64,推荐使用 UCRT64)。

2.2 安装 MinGW-w64 GCC

安装 mingw-w64 GCC 以支持 Rust GNU 版本:使用如下命令:

pacman -S mingw-w64-ucrt-x86_64-gcc

系统会解析依赖,并提示如下:

resolving dependencies...
looking for conflicting packages...Packages (15) mingw-w64-ucrt-x86_64-binutils-2.41-2mingw-w64-ucrt-x86_64-crt-git-11.0.0.r216.gffe883434-1mingw-w64-ucrt-x86_64-gcc-libs-13.2.0-2mingw-w64-ucrt-x86_64-gmp-6.3.0-2mingw-w64-ucrt-x86_64-headers-git-11.0.0.r216.gffe883434-1mingw-w64-ucrt-x86_64-isl-0.26-1mingw-w64-ucrt-x86_64-libiconv-1.17-3mingw-w64-ucrt-x86_64-libwinpthread-git-11.0.0.r216.gffe883434-1mingw-w64-ucrt-x86_64-mpc-1.3.1-2mingw-w64-ucrt-x86_64-mpfr-4.2.1-2mingw-w64-ucrt-x86_64-windows-default-manifest-6.4-4mingw-w64-ucrt-x86_64-winpthreads-git-11.0.0.r216.gffe883434-1mingw-w64-ucrt-x86_64-zlib-1.3-1mingw-w64-ucrt-x86_64-zstd-1.5.5-1mingw-w64-ucrt-x86_64-gcc-13.2.0-2Total Download Size:    49.38 MiB
Total Installed Size:  418.82 MiB:: Proceed with installation? [Y/n]

Y 确认安装,等待完成。

安装完成后,检查 GCC 版本:

gcc --version

输出示例:

gcc.exe (Rev2, Built by MSYS2 project) 13.2.0

2.3 更新 MSYS2

MSYS2 需要定期更新:

pacman -Syu

更新完成后,重新打开 UCRT64 终端

2.2 安装 gdal

在 MSYS2 UCRT64 终端中运行:

pacman -S mingw-w64-ucrt-x86_64-gdal

安装完成后,检查 GDAL 版本:

gdalinfo --version

如果输出类似:

GDAL 3.9.3, released 2024/10/07

则表示 GDAL 安装成功。

2.3 安装pkg-config

在 Windows MSYS2 环境下,**pkg-config** 是 Rust-GDAL 依赖项之一,用于帮助 cargo 识别 GDAL 头文件和库文件的位置。

UCRT64 终端中运行:

pacman -S mingw-w64-ucrt-x86_64-pkg-config

安装完成后,检查 pkg-config 版本:

pkg-config --version

如果输出类似:

0.29.2

说明安装成功 。

2.4 配置环境变量

在系统环境变量中配置下面的安装文件对应的路径:

GDAL_HOME=D:\software\msys2\ucrt64 # 主目录
PKG_CONFIG_PATH=D:\software\msys2\ucrt64\lib\pkgconfig # pkg配置文件路径
PROJ_LIB=D:\software\msys2\ucrt64\share\proj # proj的路径
GDAL_LIB_DIR=D:\software\msys2\ucrt64\lib # lib库的路径
GDAL_VERSION=393 # 安装的具体的gdal的版本

2.5 验证Rust-GDAL是否正确配置

创建 Rust 项目

cargo new rust-gdal-test
cd rust-gdal-test

Cargo.toml 添加 gdal 依赖

[dependencies]
gdal = "0.17"

src/main.rs 添加代码

use gdal::Dataset;fn main() {let dataset = Dataset::open("/vsicurl/https://download.osgeo.org/gdal/data/gtiff/small_world.tif").expect("Failed to open dataset");println!("Dataset size: {:?}", dataset.raster_size());
}

运行代码

cargo run

如果能正确输出影像数据的尺寸信息,说明 Rust-GDAL 配置安装成功!

相关文章:

Windows 安装 GDAL 并配置 Rust-GDAL 开发环境-1

Rust-GDAL 是 Rust 语言的 GDAL(Geospatial Data Abstraction Library) 绑定库,用于处理地理数据。由于 GDAL 依赖较多,在 Windows 上的安装相对复杂,本文档将介绍如何安装 GDAL 并配置 Rust-GDAL 的开发环境。 1. 检…...

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini)

IntelliJ IDEA 接入 AI 编程助手(Copilot、DeepSeek、GPT-4o Mini) 📊 引言 近年来,AI 编程助手已成为开发者的高效工具,它们可以加速代码编写、优化代码结构,并提供智能提示。本文介绍如何在 IntelliJ I…...

【金三银四】分享数据库笔试题及答案~~

你是否在面试中遇到过关于数据库的笔试题?如何高效地准备这些题目,提升自己的竞争力?本文将为你整理一些经典的数据库笔试题及其答案,助你备战面试。 金三银四马上来了,测试年限较短难免会碰到笔试题,最近…...

3.1 AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论

AI Agent产品管理革命:从愿景定义到用户价值交付的全链路方法论 引言:AI时代产品经理的范式跃迁 Gartner预测,到2026年75%的AI项目失败将归因于产品管理缺失。本文揭示AI Agent产品经理的六大核心能力模型,通过GitHub Sentinel等案例,展示如何将大模型技术转化为可持续商…...

MySQL常见错误码及解决方法(1130、1461、2003、1040、2000、1049、1062、1129、2002、1690等)

目录 【问题1】、FATAL: error 1130: Unknown error 1130 【问题2】、FATAL: error: 1461 【问题3】、ERROR 2003 (HY000): Cant connect to MySQL server on "" (113) 【问题4】、FATAL: error 2003: Cant connect to MySQL server on 172.19.111.151 (111) 【问…...

Rhel Centos环境开关机自动脚本

Rhel Centos环境开关机自动脚本 1. 业务需求2. 解决方法2.1 rc.local2.2 rc.d2.3 systemd2.4 systemd附着的方法2.5 tuned 3. 测试 1. 业务需求 一台较老的服务器上面业务比较简单,提供一个简单的网站,但已经没有业务的运维人员. 想达到的效果: 由于是非标准的apache或者nginx…...

2D 游戏艺术、动画和光照

原文:https://unity.com/resources/2d-game-art-animation-lighting-for-artists-ebook 笔记 用Tilemap瓷砖大小为1单元,人物大小在0.5~2单元 PPU :单位像素 pixels per unit 2160 4K分辨率/ 正交相机size*2 完整屏幕显示像素点 有骨骼动…...

基于SSM+uniapp的鲜花销售小程序+LW示例参考

1.项目介绍 系统角色:管理员、商户功能模块:用户管理、商户管理、鲜花分类管理、鲜花管理、订单管理、收藏管理、购物车、充值、下单等技术选型:SSM,Vue(后端管理web),uniapp等测试环境&#x…...

【第3章:卷积神经网络(CNN)——3.1 CNN的基本结构与工作原理】

嘿,小伙伴们,今天咱们来聊聊深度学习里的一大明星——卷积神经网络(CNN)。这东西在图像识别、视频处理等领域简直不要太火,甚至人脸识别、物体检测这些高大上的应用,都离不开它的身影。废话不多说,咱们这就开聊! 一、CNN是什么东东? 在人工智能领域,卷积神经网络(…...

java原子操作类实现原理

文章目录 AtomicLong实现原理递增和递减操作代码总结 LongAdder实现原理实现原理LongAdder 代码分析构造方法sum方法reset方法sumThenReset方法longValue方法add 方法longAccumulate 方法 总结 JUC 包提供 了一系列的原子性操作类,这些类都是使用非阻塞算法 CAS 实现…...

网络安全-攻击流程-传输层

传输层攻击主要针对OSI模型的第四层,涉及TCP和UDP协议的安全漏洞。以下是常见攻击类型及其流程,以及防御措施: 1. SYN洪水攻击(TCP半连接攻击) 攻击流程: 目标选择:确定目标服务器的IP地址和开…...

【R语言】回归分析

一、线性回归分析 1、lm()函数 lm()函数是用于拟合线性模型(Linear Models)的主要函数。线性模型是一种统计方法,用于描述一个或多个自变量(预测变量、解释变量)与因变量(响应变量)之间的关系…...

在分布式场景下可以使用synchronized加锁么?

首先说结论,在分布式系统中,单纯使用 Java 中的 synchronized 关键字是无法满足需求的,下面从 synchronized 的作用原理、在分布式场景下的局限性以及替代方案等方面详细分析。 一、synchronized 的作用原理 在 Java 中,synchron…...

LeetCodehot 力扣热题100 从前序与中序遍历序列构造二叉树

初始版本 这段代码实现了根据前序遍历和中序遍历重建二叉树。下面我将详细解释每一行的作用&#xff0c;并逐步讲解算法的思路和运行步骤。 代码及注释 class Solution {public:// buildTree 函数用来根据前序遍历(pre)和中序遍历(in)重建二叉树TreeNode* buildTree(vector<…...

Day45(补)【软考】2022年下半年软考软件设计师综合知识真题-计算机软件知识1

文章目录 2022年下半年软考软件设计师综合知识真题第1章 计算机系统基础知识(12/38)计算机软件知识1-6/6哲学概念及收敛思维&#xff1a;是Python程序语言中&#xff0c;处理异常的结构集合&#xff0c;和这个集合之外的结构的区分&#xff0c;考Python集合之外的结构 哲学概念…...

luoguP8764 [蓝桥杯 2021 国 BC] 二进制问题

luogu题目传送门 题目描述 小蓝最近在学习二进制。他想知道 1 到 N 中有多少个数满足其二进制表示中恰好有 K 个 1。你能帮助他吗? 输入格式 输入一行包含两个整数 N 和 K。 输出格式 输出一个整数表示答案。 输入输出样例 输入 #1 7 2 输出 #1 3 说明/提示 对于…...

图形渲染(一)——Skia、OpenGL、Mesa 和 Vulkan简介

1.Skia —— 2D 图形库 Skia 是一个 2D 图形库&#xff0c;它的作用是为开发者提供一个高层次的绘图接口&#xff0c;方便他们进行 2D 图形渲染&#xff08;比如绘制文本、形状、图像等&#xff09;。Skia 本身不直接管理 GPU 或进行底层的渲染工作&#xff0c;而是通过 底层图…...

浏览器打开Axure RP模型

1&#xff0c;直接使用chrome打开&#xff0c;提示下载插件 2&#xff0c;需要做一些操作 打开原型文件&#xff0c;找到resources\chrome\axure-chrome-extension.crx文件&#xff0c;这就是我们需要的Chrome插件。 将axure-chrome-extension.crx文件后缀名改为axure-chrome…...

【计算机网络】数据链路层数据帧(Frame)格式

在计算机网络中&#xff0c;数据帧&#xff08;Frame&#xff09; 是数据链路层的协议数据单元&#xff08;PDU&#xff09;&#xff0c;用于在物理介质上传输数据。数据帧的格式取决于具体的链路层协议&#xff08;如以太网、PPP、HDLC 等&#xff09;。以下是常见数据帧格式的…...

平面与平面相交算法杂谈

1.前言 空间平面方程&#xff1a; 空间两平面如果不平行&#xff0c;那么一定相交于一条空间直线&#xff0c; 空间平面求交有多种方法&#xff0c;本文进行相关讨论。 2.讨论 可以联立方程组求解&#xff0c;共有3个变量&#xff0c;2个方程&#xff0c;而所求直线有1个变量…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡

何谓AI编程【02】AI编程官网以优雅草星云智控为例建设实践-完善顶部-建立各项子页-调整排版-优雅草卓伊凡 背景 我们以建设星云智控官网来做AI编程实践&#xff0c;很多人以为AI已经强大到不需要程序员了&#xff0c;其实不是&#xff0c;AI更加需要程序员&#xff0c;普通人…...

AT模式下的全局锁冲突如何解决?

一、全局锁冲突解决方案 1. 业务层重试机制&#xff08;推荐方案&#xff09; Service public class OrderService {GlobalTransactionalRetryable(maxAttempts 3, backoff Backoff(delay 100))public void createOrder(OrderDTO order) {// 库存扣减&#xff08;自动加全…...

边缘计算设备全解析:边缘盒子在各大行业的落地应用场景

随着工业物联网、AI、5G的发展&#xff0c;数据量呈爆炸式增长。但你有没有想过&#xff0c;我们生成的数据&#xff0c;真的都要发回云端处理吗&#xff1f;其实不一定。特别是在一些对响应时间、网络带宽、数据隐私要求高的行业里&#xff0c;边缘计算开始“火”了起来&#…...

PCA笔记

✅ 问题本质&#xff1a;为什么让矩阵 TT 的行列式为 1&#xff1f; 这个问题通常出现在我们对数据做**线性变换&#xff08;旋转/缩放&#xff09;**的时候&#xff0c;比如在 PCA 中把数据从原始坐标系变换到主成分方向时。 &#x1f4cc; 回顾一下背景 在 PCA 中&#xff…...

C#调用Rust动态链接库DLL的案例

C#调用Rust动态链接库DLL的案例 项目概述 这是一个演示C#调用Rust动态链接库DLL的项目&#xff0c;包含&#xff1a; C#主程序 (Program.cs)Rust动态链接库 (rust_to_csharp目录) 使用C#创建一个net9的控制台项目&#xff0c;不使用顶级语句 dotnet new console --framewo…...

《开篇:课程目录》

大家好&#xff01;我是一名.NET技术开发者&#xff0c;长期以来积累了比较多的项目实战经验&#xff0c;现在把它分享给大家&#xff0c;希望能够帮助到大家&#xff0c;同时为.NET社区提供一份力量&#xff0c;让更多的开发者参与进来。 要讲解的课程如下&#xff1a; 《介绍…...