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.pswp.cn/diannao/77333.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/77333.shtml
英文地址,請注明出處:http://en.pswp.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格式的文件:空格,冒號. 劇本未來我們批量管理,運維必會的內容. …