VS2015編譯GDAL3.2.0+opencl+C#

參考借鑒https://www.cnblogs.com/litou/p/15004877.html

參考借鑒https://www.cnblogs.com/xiaowangba/p/6313903.html

參考借鑒gdal、proj、geos、sqlite等在VS2015下編譯和配置_vs2015編譯sqlite3-CSDN博客

參考借鑒Windows下GDAL3.1.2編譯 (VS2015)_gdal windows編譯-CSDN博客

之前一直用gdal.2.x版本,用的還是vs2013編譯,因最近需要新版的影像處理工具,并用到gdal GPU加速,于是便基于gdal3.x重新編譯了。借鑒了網上教程,選定了gdal3.2.0+proj6.3.0+sqlite3.3.6版本。

一、編譯前準備工作
1)GDAL3.2.0:依賴PROJ >= 6;依賴VC++ >= 1900(即>=2015);依賴SQLite3

2)PROJ6.3.0:依賴SQLite3 >= 3.11;依賴CMake >= 3.5(https://proj.org/en/6.3/install.html#build-requirements)

基于以上情況,確定編譯需要的文件如下:

1)GDAL 3.2.0:gdal-3.2.0.tar.gz(https://github.com/OSGeo/gdal/releases/download/v3.2.0/gdal-3.2.0.tar.gz)

2)PROJ 6.3.0:proj-6.3.0.tar.gz(https://download.osgeo.org/proj/proj-6.3.0.tar.gz)

3)SQLite 3.36(https://www.sqlite.org/download.html)

a)Source Code:sqlite-amalgamation-3360000.zip(https://www.sqlite.org/2021/sqlite-amalgamation-3360000.zip)

b)Precompiled Binaries for Windows:
sqlite-dll-win64-x64-3360000(https://sqlite.org/2021/sqlite-dll-win64-x64-3360000.zip)、
sqlite-tools-win32-x86-3360000.zip(https://www.sqlite.org/2021/sqlite-tools-win32-x86-3360000.zip)

4)SWIG:swigwin-3.0.12.zip(用于編譯C#代碼)(https://sourceforge.net/projects/swig/files)

安裝環境
1)安裝VS2015:需含VC++功能(若vs2015安裝時出錯,安裝包版本可能為專業版文件大小3.7GB的,請安裝社區版文件大小7GB的,以免后續編譯過程中出現報錯。https://download.microsoft.com/download/5/d/1/5d1ec81e-bc59-448f-9ab6-27636d5cc18a/vs2015.3.com_chs.iso,)

2)安裝CMake:cmake-3.22.6-windows-x86_64.msi(https://cmake.org/files/v3.22/cmake-3.22.6-windows-x86_64.msi)

二、sqlite3編譯
2.1 解壓sqlite-amalgamation-3360000.zip,得到頭文件sqlite3.h,sqlite3ext.h,以及源文件shell.c,sqlite3.c;
2.2 解壓sqlite-dll-win64-x64-3360000.zip,得到sqlite3.def,sqlite3.dll,與步驟1的文件放在同一目錄下,


2.3編譯
1)手動創建一個空的Win32控制臺程序,sqlite3;
2)將shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h、sqlite3.def 文件添加到工程中;

3)設置預定義處理;
? ? 屬性 --->>> C/C++ --->>> 預處理器 --->>> 預處理器定義中添加如下,
?? ??? ?
?? ?_USRDLL
?? ?SQLITE_ENABLE_RTREE
?? ?SQLITE_ENABLE_COLUMN_METADATA
?? ?SQLITE_ENABLE_FTS5
?? ?SQLITE_ENABLE_UNLOCK_NOTIFY
?? ?
4)設置模塊定義文件

? ? 鏈接器 --->>> 輸入 --->>> 模塊定義文件:sqlite3.def
?? ?
5)修改模塊定義文件

? ? 用文本編輯打開sqlite3.def在最后追加:sqlite3_unlock_notify;
?? ?
6)配置類型改為靜態庫lib庫

?? ?配置屬性 --->>> 常規 --->>>項目默認值 --->>>配置類型:靜態庫lib

7)打開配置管理器,設置解決方案為Release,平臺為x64
8)生成項目,即得sqlite3.lib
9)安裝
? ?創建sqlite3_install目錄,其下再創建bin,include,lib文件目錄,分別放置
? ?sqlite3.exe,
? ?sqlite3.h、sqlite3ext.h,
? ?sqlite3.lib 即可
?? ??? ?


三、PROJ編譯
3.1 在PROJ-6.3目錄中新建一個名為build.bat文件。用于執行camke命令行構建Visual Studio 工程;


3.2 編寫編譯bat,設置sqlite3 inlcude ,lib, exe路徑,設置構建目錄proj4_build和安裝目錄proj4_install

@echo off
REM 定義SQLite的Include目錄變量
set SQLITE3_INCLUDE_DIR="%cd%\sqlite3_install\include" REM 定義SQLite的Lib路徑變量
set SQLITE3_LIBRARY="%cd%\sqlite3_install\lib\sqlite3.lib"REM 定義SQLite的exe路徑變量 
set EXE_SQLITE3="%cd%\sqlite3_install\bin\sqlite3.exe"REM 定義源代碼路徑路徑變量 
set src_dir="%cd%"echo %src_dir%REM 定義構建VisualStudio工程目錄變量 
set build_dir="%cd%/../proj4_build"REM 定義安裝目錄變量 
set install_dir="%cd%/../proj4_install"REM 創建VisualStudio工程目錄
mkdir %build_dir%REM 創建安裝目錄
mkdir %install_dir%REM 定義cmake安裝編譯的類型
set CMAKE_BUILD_TYPE=ReleaseREM 定義cmake安裝目錄
set CMAKE_INSTALL_PREFIX=%install_dir%REM 回到構建VisualStudio工程目錄
cd %build_dir%REM 調用camke命令行參數
cmake -G "Visual Studio 14 2015" -A x64   -S %src_dir%  -B %build_dir% -DSQLITE3_INCLUDE_DIR=%SQLITE3_INCLUDE_DIR% -DSQLITE3_LIBRARY=%SQLITE3_LIBRARY% -DEXE_SQLITE3=%EXE_SQLITE3%    -DCMAKE_BUILD_TYPE=%CMAKE_BUILD_TYPE%  -DCMAKE_INSTALL_PREFIX=%CMAKE_INSTALL_PREFIX%                              pause

1)通過VS2015 x64 本機工具命令指示符,進入命令界面;
2)通過cd命令進入到build.bat文件所在目錄;?
3)運行build.bat;
4)打開proj_build文件夾下的proj.sln,生成項目 ALL_BUILD 以及 INSTALL 即可;

四、GDAL編譯
4.1 gdal基本設置
gdal-3.2.0.tar.gz解壓到E:\gdal_source\gdal-3.2.0,找到目錄下的nmake.opt文件:

第42行左右,找到MSVC_VER=設置為1900(1900是指 VS 版本為2015,1910是指 VS 版本為2017,1921是指 VS 版本為2019)。
第66行左右,找到GDAL_HOME =位置為你想編譯后輸出的路徑,比如"D:\gdal_source\gdal-3.2.0-build"。
第213行左右,找到WIN64=YES,固定生成64位版本,取消注釋本行。
第240行左右,找到DLLBUILD=設置為1啟動動態編譯、 0為靜態編譯。
第260行左右,找到PROJ_INCLUDE,PROJ_LIBRARY。分別設置成PROJ6的include和lib文件夾(其中PROJ_INCLUDE的-I后為地址)。
第650行左右,找到SQLITE_INC,SQLITE_LIB。設置方式同上。

4.2 opencl設置
1)首先在nmake.opt文件參考其他的引用庫,添加OpenCL的庫目錄。首先在namke.opt找到下面這行:
第941行左右,END OF STUFF THAT NORMALLY NEEDS TO BE UPDATED?
在上面這行代碼的前面添加如下代碼(使用的是NVIDIA的CUDA安裝包下面的OpenCL庫):

# Uncomment for OPENCL_AMD support
!IFDEF INCLUDE_OPENCL
OPENCL_DIR="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8"
OPENCL_CFLAGS = -I$(OPENCL_DIR)/include -DHAVE_OPENCL
OPENCL_LIB ? ?= $(OPENCL_DIR)/lib/x64/OpenCL.lib
!ELSE
OPENCL_DIR=
OPENCL_CFLAGS = -I
OPENCL_LIB ? ? =?
!ENDIF

2)然后在上面那行代碼(END OF STUFF THAT NORMALLY NEEDS TO BE UPDATED)的下面添加下面的代碼:
# liml
!IFDEF INCLUDE_OPENCL
OPENCL_FLAG = -DHAVE_OPENCL
!ENDIF

2)找到973行左右, CFLAGS?? ?=?? ?$(OPTFLAGS)這行代碼,在$(OPTFLAGS)前面添加$(OPENCL_FLAG),注意要留下之間空格,即
CFLAGS?? ?=?? ?$(OPENCL_FLAG) $(OPTFLAGS)

3)找到文件最后,代碼EXTERNAL_LIBS =,在最后添加$(OPENCL_LIB)

4)轉到gdal根目錄,找到alg目錄下的makefile.vc文件,
首先在文件中OBJ = 的前面添加下面的代碼,用來設置使用OpenCL的宏定義;
!IFDEF INCLUDE_OPENCL
EXTRAFLAGS = $(EXTRAFLAGS) $(OPENCL_CFLAGS) -DHAVE_OPENCL
!ENDIF

然后在文件中OBJ = 的后面添加OpenCL的算法文件gdalwarpkernel_opencl.obj


5)編譯
打開VS2015的x64 Native Tools Command Prompt for VS 2015命令行,右鍵使用管理員運行,cd到gdal根目錄,依次運行以下命令

nmake /f makefile.vc clean
nmake /f makefile.vc
nmake /f makefile.vc install
nmake /f makefile.vc devinstall

4.3 c#設置
1)在nmake.opt文件設置swig.exe路徑,
找到102行左右,SWIG = "E:\swigwin-3.0.12\swig.exe"

2)用文本編輯工具,打開E:\gdal_source\gdal-3.2.0\swig\csharp下的makefile.vc文件,修改內容如下:

  a)32行處,!IFNDEF NETSTANDARD 改為 !IFDEF NETSTANDARD。

  b)35行處,!IFNDEF NETCORE 改為 !IFDEF NETCORE。

  c)40行處,CSC=csc /platform:anycpu 改為 CSC=csc /platform:x64。(64位編譯必須要修改)


3)編譯

打開VS2015的x64 Native Tools Command Prompt for VS 2015命令行,右鍵使用管理員運行,cd到E:\gdal_source\gdal-3.2.0\swig\csharp,依次運行以下命令

nmake -f makefile.vc interface WIN64=1
nmake -f makefile.vc WIN64=1
nmake -f makefile.vc install WIN64=1

測試執行:gdalwarp -tr 0.02 0.02 F:\TestData\merge\cun.tif F:\TestData\cun_out3_2.tif -wo USE_OPENCL=TRUE -co COMPRESS=LZW -co BIGTIFF=YES -wt Int16 -r bilinear

五 注意事項

1.編譯過程中出現報錯,如json,javascript諸如問題,可能為vs2015問題,若vs2015安裝包版本為專業版文件大小3.7GB的,安裝過程中應該會提示找不到安裝文件,請卸載后并重新下載社區版文件大小7GB的,以免后續編譯報錯。https://download.microsoft.com/download/5/d/1/5d1ec81e-bc59-448f-9ab6-27636d5cc18a/vs2015.3.com_chs.iso。

2.gdal3.x需手動設置PROJ_LIB路徑,否則執行gdal命令會提示缺乏proj.db問題,通過設置環境變量PROJ_LIB,如PROJ_LIB=E:\gdal_source\proj\proj4_install\share\proj 即可解決。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213501.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213501.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213501.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

字符串String

字符串字面量 let s "hello";變量s屬于字符串字面量,它們屬于硬編碼進程序的字符串值,屬于不可變的類型。但并不是所有字符串的值都能夠在編寫代碼時確定。 String類型 String類型會在堆上分配到自己需要的存儲空間,所以它能夠…

Nacos簡介

1.Nacos簡介 1.1.為什么叫Nacos? 前四個字母分別為Naming和Configuration的前兩個字母,最后的s為service。 1.2.Nacos是什么? nacos是第二代微服務SpringCloudAlibaba開源的一款注冊中心和分布式配置中心組件,其功能上為第一代微…

聲明式數據建模、定義簡單易懂:下一代 ORM 助你效率倍增 | 開源日報 No.102

prisma/prisma Stars: 34.0k License: Apache-2.0 Prisma 是一個下一代 ORM,包括以下工具: Prisma Client:為 Node.js 和 TypeScript 自動生成的類型安全查詢構建器Prisma Migrate:聲明式數據建模和遷移系統Prisma Studio&#…

山人求道篇:五、交易中的大道至簡與奧卡姆剃刀

量化的剃刀不是減去因子、減去代碼,而是減去冗余信息量 市面上有的策略對各品種設置了不同參數,每個品種進場不一樣就算了,出場參數還不一樣,那你說他到底賺的是什么利潤呢? 他自己也不知道,主要目的是為…

鴻蒙應用開發(二)環境搭建

開發流程 IDE下載 首先下載HUAWEI DevEco Studio,介紹首次啟動DevEco Studio的配置向導: 運行已安裝的DevEco Studio,首次使用,請選擇Do not import settings,單擊OK。安裝Node.js與ohpm。node.js 是基于 V8 引擎構…

JavaScript常用技巧專題二

文章目錄 一、前言二、生成隨機字符串三、轉義HTML特殊字符四、單詞首字母大寫五、將字符串轉換為小駝峰六、刪除數組中的重復值七、移除數組中的假值八、獲取兩個數字之間的隨機數九、將數字截斷到固定的小數點十、日期10.1、計算兩個日期之間天數10.2、從日期中獲取是一年中的…

【Java編程實現 9 * 9 乘法表格打印四種形態,七種打法】

Java編程實現 9 * 9 乘法表格打印四種形態,七種方法打印 廢話篇打印 9 * 9 乘法表格嵌套for循環實現左下角打印嵌套for循環實現左上角打印嵌套for循環實現右上角打印嵌套for循環實現右下角打印 使用while循環打印 9 * 9 乘法表格(一)使用whil…

1003 我要通過!

“答案正確”是自動判題系統給出的最令人歡喜的回復。本題屬于 PAT 的“答案正確”大派送 —— 只要讀入的字符串滿足下列條件,系統就輸出“答案正確”,否則輸出“答案錯誤”。 得到“答案正確”的條件是: 字符串中必須僅有 P、 A、 T這三種…

詳解Keras3.0 Layers API: Core layers

1、Input keras.Input(shapeNone,batch_sizeNone,dtypeNone,sparseNone,batch_shapeNone,nameNone,tensorNone, ) 參數說明 shape: 輸入張量的形狀。如果為None,則可以動態地指定形狀。batch_size: 批處理大小。如果為None,則可以動態地指定批處理大小…

基于SpringBoot+Vue前后端分離的景點數據分析平臺(Java畢業設計)

大家好,我是DeBug,很高興你能來閱讀!作為一名熱愛編程的程序員,我希望通過這些教學筆記與大家分享我的編程經驗和知識。在這里,我將會結合實際項目經驗,分享編程技巧、最佳實踐以及解決問題的方法。無論你是…

awt中文亂碼-Intellij IDEA

亂碼的根本原因在于秦始皇嘎太早了(bushi 解決方法:肉眼可見的編碼設置統一為GBK 1.打開設置找到文件編碼 2.肉眼可見的編碼統統改成GBK 有人該問了,為什么不改成utf-8,因為awt的編碼由操作系統決定,我的是win家庭中…

Nextui使用

安裝和使用 https://nextui.org/docs/frameworks/nextjs 自定義主題 https://nextui.org/docs/customization/customize-theme // tailwind.config.js const {nextui} require("nextui-org/react");/** type {import(tailwindcss).Config} */ module.exports {…

deepstream docker安裝

介紹 deepstream為dGPU和Jetson平臺提供dockers containers,這些鏡像可以方便開發者很快地部署deepstream應用。deepstream的docker images可以在NGC web中得到。 安裝Docker Docker 是一個開源的容器化平臺,它允許你構建,測試&#xff0c…

29. 如何在Spring所有BeanDefinition注冊完后做擴展?

如何在Spring所有BeanDefinition注冊完后做擴展? 通常可以使用beanFactoryPostProcessor 對已注冊的BeanDefinition進行修改或者通過它的子接口BeanDefinitionRegistryPostProcessor 再進行注冊額外擴展 BeanDefinitionRegistryPostProcessor 1、概述 public interface Bea…

0基礎學java-day18-( 坦克大戰【2】)

課件資源放在文末 1.線程-應用到坦克大戰 1.1 坦克大戰 0.3 【坦克類:包括坦克的基本屬性,以及坦克的移動方法】 package com.hspedu.tankgame03;/*** author 韓順平* version 1.0*/ public class Tank {private int x;//坦克的橫坐標private int y;…

XMemcached network layout exception java.nio.channels.ClosedChannelException

java.nio.channels.ClosedChannelException 表示嘗試在已關閉的通道上進行 I/O 操作,通常發生在網絡連接意外關閉后嘗試在關閉的通道上執行讀取或寫入操作。 XMemcached network layout exception 可能是由于 XMemcached 客戶端在嘗試與 Memcached 服務器通信時發生…

一些AG10K FPGA 調試的建議-Douglas

PLL AGM FPGA 在配置成功時,PLL 已經完成鎖定,lock 信號已經變高;如果原設計中用 lock 信號輸出實現系統 reset 的復位功能,就不能正確完成上電復位;同時,為了保證 PLL 相移的穩定,我們需要在 P…

C++筆記之重載和重寫辨別

C筆記之重載和重寫辨別 code review! 文章目錄 C筆記之重載和重寫辨別重載(overloading)重寫(Overriding) 在C中,重載(overloading)和重寫(overriding)是面向對象編程中…

筆記69:Conv1d 和 Conv2d 之間的區別

筆記地址:D:\work_file\(4)DeepLearning_Learning\03_個人筆記\4. Transformer 網絡變體 a a a a a a a a a a a

設計模式-門面模式(Facade)

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 文章目錄 前言一、定義二、結構 前言 在組件構建過程中,某些接口之間直接依賴會帶來很多問題,甚至無法直接實現。采用一層間接接口,來隔離…