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_DIR
和TIFF_LIBRARY_RELEASE
,不設置TIFF_LIBRARY_DEBUG
TIFF 配置完成
?
2.4 設置 curl
同樣,只設置
CURL_INCLUDE_DIR
和CURL_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;
}