GDAL庫(kù)在Visual Studio C++環(huán)境中的配置

??本文介紹在Visual Studio軟件中配置、編譯C++ 環(huán)境下GDAL庫(kù)、SQLite環(huán)境與PROJ庫(kù)的詳細(xì)方法。

??GDAL庫(kù)是一個(gè)非常方便的地理數(shù)據(jù)處理庫(kù),但其在C++ 環(huán)境下的配置與編譯流程較為復(fù)雜;尤其是最新的GDAL 3及以上版本,其在C++ 環(huán)境中的配置更是首先需要滿足許多其他的環(huán)境配置條件(包括SQLite環(huán)境、CMake軟件與PROJ庫(kù)),使得其配置變得更復(fù)雜一些。本文就詳細(xì)介紹在Visual Studio軟件中,配置GDAL庫(kù)所需的環(huán)境,并最終配置、編譯GDAL庫(kù)的方法。

1 寫(xiě)在前面

??首先,本文是基于Visual Studio 2022軟件進(jìn)行的配置;其中,GDAL庫(kù)版本為3.5.2SQLite環(huán)境版本為3.39.4,PROJ庫(kù)版本為9.1.0。此外,在配置過(guò)程中還需要用到跨平臺(tái)編譯工具CMake軟件,其版本為3.24.2。如果大家安裝的是以上庫(kù)、環(huán)境或軟件的其他版本,也可以參考本文,因?yàn)檎w流程都是近似的;但可能部分操作的細(xì)節(jié)會(huì)稍微有一些差異。

??其次,在編譯PROJ庫(kù)時(shí)發(fā)現(xiàn),可能是由于PROJ庫(kù)最新的9.1.0版本的自身要求,只能編譯Release版本的PROJ庫(kù);若編譯Debug版本則會(huì)報(bào)錯(cuò);而同時(shí),SQLite環(huán)境、PROJ庫(kù)與最終的GDAL庫(kù)需要保持一致(即三者要么都是Release版本,要么都是Debug版本)。因此,本文最終選擇了配置Release版本的GDAL庫(kù);但最終測(cè)試代碼時(shí)發(fā)現(xiàn),在Visual Studio軟件中無(wú)論是Release模式還是Debug模式,都可以成功調(diào)用配置好的Release版本的GDAL庫(kù)。所以,本文就主要介紹Release版本的GDAL庫(kù)的配置方法,但也會(huì)在對(duì)應(yīng)流程處注明如果想配置Debug版本的GDAL庫(kù),該如何設(shè)置。

2 具體配置

??配置GDAL庫(kù)首先需要準(zhǔn)備好PROJ庫(kù),而PROJ庫(kù)的配置則需要準(zhǔn)備好SQLite環(huán)境與CMake軟件(這些似乎是GDAL 3及以上版本才需要的,網(wǎng)上很多GDAL 2版本的配置教程都沒(méi)有這么麻煩的準(zhǔn)備工作);因此我們首先逐一配置好上述這些額外需要的環(huán)境或軟件。

2.1 SQLite配置

??首先,我們進(jìn)行SQLite環(huán)境的配置。SQLite是一個(gè)由C語(yǔ)言撰寫(xiě)的數(shù)據(jù)庫(kù)引擎,其為后續(xù)需要配置的PROJ庫(kù)提供了數(shù)據(jù)支持,同時(shí)配置GDAL庫(kù)也會(huì)用到這一環(huán)境。

??首先,我們進(jìn)入SQLite官方下載網(wǎng)站https://www.sqlite.org/download.html),并下載“Source Code”中的第一項(xiàng)sqlite-amalgamation-3390400,以及“Precompiled Binaries for Windows”中的第二項(xiàng)sqlite-dll-win64-x64-3390400與第三項(xiàng)sqlite-tools-win32-x86-3390400,一共是三個(gè)文件,如下圖所示。這里需要注意,隨著SQLite版本的更新,上述三個(gè)文件名稱最后面的一長(zhǎng)串?dāng)?shù)字會(huì)隨著改變,大家只需要對(duì)照好文件名稱前面的字樣即可。

??隨后,將上述下載好的三個(gè)壓縮包文件解壓到同一個(gè)文件夾下(下圖是我在配置完SQLite環(huán)境之后截的圖,因此文件夾的個(gè)數(shù)與名稱和大家的會(huì)有一些差異)。

??隨后,打開(kāi)Visual Studio軟件,新建一個(gè)項(xiàng)目。我這里因?yàn)?strong>Visual Studio軟件原本就是開(kāi)著的,所以就可以選擇“文件”→“新建”→“項(xiàng)目...”。

??隨后,選擇“空項(xiàng)目”,并選擇“下一步”。

??配置好“項(xiàng)目名稱”與“位置”。其中,“項(xiàng)目名稱”我在這里配置為MySQLite,“位置”就選擇剛剛我們解壓縮三個(gè)文件的文件夾即可。

??隨后,分別在“頭文件”與“源文件”處右鍵,通過(guò)“添加”→“現(xiàn)有項(xiàng)...”的方法,將剛剛解壓縮得到文件中的sqlite3.hsqlite3ext.h文件放入“頭文件”,并將sqlite3.csqlite3.def文件放入“源文件”。

??完成后如下圖所示。

??接下來(lái),選中項(xiàng)目名稱MySQLite,并選擇“屬性”→“配置屬性”→“常規(guī)”,選擇“配置類型”,將其選擇為靜態(tài)庫(kù)(.lib),并在上方的“配置”與“平臺(tái)”中將二者選擇為“所有配置”與“所有平臺(tái)”。

??接下來(lái),在“C/C++”→“預(yù)處理器”中,設(shè)置“預(yù)處理器定義”。

??在其中復(fù)制如下代碼即可。

_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY

??復(fù)制后如下圖所示。

??接下來(lái),在“鏈接器”→“輸入”中配置“模塊定義文件”。

??找到剛剛解壓縮得到的sqlite3.def文件,按下Shift按鈕并右鍵,選擇“復(fù)制文件地址”。

??并將其粘貼至“模塊定義文件”中。

??接下來(lái),在Visual Studio軟件中,打開(kāi)sqlite3.def文件,在其最后一行添加如下的代碼。

sqlite3_unlock_notify

??如下圖所示。

??接下來(lái),在上圖最上方的紅色方框處,將原來(lái)的Debug修改為Release,如下圖所示;表示我們接下來(lái)將配置Release版本的SQLite環(huán)境。如果大家需要Debug版本,那么這里就還是保持選中Debug即可。

??接下來(lái),選中項(xiàng)目名稱,并右鍵選擇“生成”。

??接下來(lái),Visual Studio軟件將生成項(xiàng)目。

??此時(shí),在前面提到的SQLite環(huán)境所下載的三個(gè)壓縮包文件解壓后所存放的文件夾中,我們新建三個(gè)文件夾,分別命名為include、libbin。

??隨后,首先在剛剛生成的項(xiàng)目的x64\Release文件夾中,找到MySQLite.lib文件。這里如果大家剛剛生成的是Debug版本的項(xiàng)目,那么就是在Debug文件夾中。

??隨后,將其復(fù)制到剛剛新建的lib文件夾中。

??接下來(lái),將sqlite-amalgamation-3390400文件夾中的sqlite3.hsqlite3ext.h文件復(fù)制。

??將其粘貼至剛剛新建立的include文件夾中。

??隨后,將sqlite-tools-win32-x86-3390400文件夾中的sqlite.exe文件復(fù)制。

??粘貼至剛剛新建立的bin文件夾中。

??以上,即完成了SQLite環(huán)境的配置。

2.2 CMake配置

??接下來(lái),我們開(kāi)始對(duì)CMake軟件進(jìn)行配置。CMake軟件是一個(gè)跨平臺(tái)的編譯軟件,在后期進(jìn)行PROJ庫(kù)配置時(shí)需要用到。

??首先,我們還是在其官方下載網(wǎng)站https://cmake.org/download/)進(jìn)行軟件的下載。這里我們下載其“Binary distributions”中的第一項(xiàng)即可。

??下載完畢后,可以看到其安裝包。

??雙擊安裝包,進(jìn)行軟件的安裝即可。這里需要注意,安裝過(guò)程中,在以下窗口中我們需要選擇第三項(xiàng),并勾選中最下方的勾選項(xiàng),如下圖所示。

??以上,即完成了CMake軟件的配置。

2.3 PROJ配置

??接下來(lái),我們開(kāi)始PROJ庫(kù)的配置。PROJ庫(kù)是一個(gè)地理坐標(biāo)轉(zhuǎn)換庫(kù),用以處理不同的地理坐標(biāo)數(shù)據(jù);因?yàn)槲覀円惭b的GDAL庫(kù)是一個(gè)地理數(shù)據(jù)處理庫(kù),因此其固然需要PROJ這一地理坐標(biāo)轉(zhuǎn)換庫(kù)來(lái)完成各項(xiàng)地理數(shù)據(jù)操作。

??PROJ庫(kù)的配置有兩種方法——第一種是傳統(tǒng)方法,即用庫(kù)的源代碼來(lái)進(jìn)行編譯;第二種是PROJ庫(kù)官網(wǎng)比較推薦的新方法,即用OSGeo4W軟件來(lái)進(jìn)行PROJ庫(kù)的下載與編譯。盡管PROJ庫(kù)官網(wǎng)目前推薦用第二種方法來(lái)配置,但是我一直沒(méi)有找到第二種方法配置PROJ庫(kù)完畢后其所生成的數(shù)據(jù)文件,導(dǎo)致沒(méi)有辦法進(jìn)行后續(xù)GDAL庫(kù)的配置;另一方面,若采用第二種方法,OSGeo4W軟件在下載PROJ庫(kù)時(shí)經(jīng)常會(huì)出現(xiàn)網(wǎng)絡(luò)問(wèn)題導(dǎo)致的下載終止,且想要再下載還只能重新開(kāi)始,非常耽誤時(shí)間。因此,我個(gè)人還是建議大家用第一種方法(也就是下文中的方法一)來(lái)實(shí)現(xiàn);雖然這種方法操作起來(lái)比較麻煩,但至少比較穩(wěn)定,而且可以保證后續(xù)GDAL庫(kù)的配置是可以實(shí)現(xiàn)的。同時(shí),本文也將并不推薦的第二種方法的操作流程介紹一下,如果大家感興趣可以研究一下第二種方法。

2.3.1 方法一

??首先,我們?cè)?code>PROJ庫(kù)的官方下載網(wǎng)站https://proj.org/download.html)中下載其源代碼。

??在官網(wǎng),我們還可以看到官方將這種從源代碼編譯的方法稱作“傳統(tǒng)方法”。

??隨后,將下載后的壓縮包解壓,并在解壓后得到的文件夾中新建立一個(gè)build文件夾。

??接下來(lái),打開(kāi)我們剛剛下載、安裝好的CMake軟件,并在下圖所示的兩個(gè)編輯欄中,分別選定解壓后的PROJ庫(kù)文件夾與我們剛剛在其中新建的build文件夾;隨后,點(diǎn)擊“Configue”。

??隨后,在彈出的窗口中配置我們的Visual Studio軟件版本,并在第二個(gè)選項(xiàng)中選擇處理器的架構(gòu),一般選擇x64即可。

??隨即,CMake軟件開(kāi)始運(yùn)行第一次配置。稍等片刻,一般會(huì)出現(xiàn)滿屏幕的紅色,如下圖所示。

??其中,我們需要修改一下上圖中藍(lán)色方框內(nèi)的五條數(shù)據(jù)。首先,我們?cè)诮鈮汉蟮?code>PROJ庫(kù)文件夾中,新建GTest文件夾。

??并將其作為GTest_DIR后所對(duì)應(yīng)的數(shù)據(jù)。

??接下來(lái),在CMAKE_INSTALL_PREFIX中,配置一個(gè)我們后期將要存放PROJ庫(kù)的路徑;接下來(lái)的三個(gè)數(shù)據(jù),我們分別選擇前面配置SQLite環(huán)境時(shí),所得到的bin文件夾中的sqlite3.exe文件、include文件夾與MySQLite.lib文件的路徑。具體配置如下圖所示。

??隨后,再點(diǎn)擊一次“Configue”。

??稍等片刻,待其配置完成后,再點(diǎn)擊“Generate”;如上圖所示。

??待其生成完畢后,我們可以在剛剛解壓后的PROJ庫(kù)文件夾中新建的build文件夾中,看到如下所示的.sln文件。

??隨后,在開(kāi)始菜單中找到位于Visual Studio 2022軟件下的“x64 Native Tools Command Prompt for VS 2022”軟件。

??首先,cd進(jìn)入PROJ庫(kù)文件夾中剛剛新建的build文件夾。這里大家依據(jù)剛剛自己設(shè)定的文件夾路徑來(lái)cd進(jìn)入即可。

cd C:\proj-9.1.0\build

??接下來(lái),輸入如下的代碼,并回車運(yùn)行。

msbuild ALL_BUILD.vcxproj /p:Configuration="Release"

??其中,上述代碼中="Release"表示我們將編譯Release版本的PROJ庫(kù);如果大家需要編譯Debug版本的庫(kù),則將其修改為="Debug"即可。

??這里我們提一句,本文開(kāi)頭之所以說(shuō)最終只能編譯Release版本的PROJ庫(kù),是因?yàn)橐坏┣懊娴拇a我們選擇編譯Debug版本,則其運(yùn)行后會(huì)報(bào)錯(cuò),出現(xiàn)如下所示的情況。

??其中,這里不同的錯(cuò)誤,都表明我們目前只能配置Release版本的PROJ庫(kù)。

??因此,我在這里最終選擇編譯Release版本的PROJ庫(kù)。雖然選擇編譯Release版本的PROJ庫(kù)在這里也會(huì)有警告出現(xiàn),但這并不影響最后的結(jié)果。

??接下來(lái),我們繼續(xù)輸入如下所示的代碼。

msbuild INSTALL.vcxproj /p:Configuration="Release"

??其中,如果我們需要編譯Debug版本的庫(kù),則將其修改為="Debug"即可。

??運(yùn)行代碼,得到結(jié)果如下。

??此時(shí),前面提到我們?cè)?strong>CMake軟件中設(shè)置了CMAKE_INSTALL_PREFIX所對(duì)應(yīng)的文件夾路徑。

??在這個(gè)路徑中,此時(shí)我們可以看到其已經(jīng)自動(dòng)生成了bin、include、libshare等四個(gè)文件夾。

??以上,即完成了PROJ庫(kù)的配置。

2.3.2 方法二

??這里我們介紹一下PROJ庫(kù)的第二種配置方法。但前面我們也提到,并不推薦這種方法,大家如果有需要參考一下即可。如果前面已經(jīng)通過(guò)方法一實(shí)現(xiàn)了PROJ庫(kù)的配置,那么直接跳過(guò)這里,繼續(xù)閱讀本文2.4部分即可。

??首先,我們按照官方所給出的OSGeo4W軟件下載路徑,進(jìn)行OSGeo4W軟件的下載。

??或者也可以直接從這里進(jìn)行下載:https://download.osgeo.org/osgeo4w/osgeo4w-setup.exe。

??接下來(lái),進(jìn)行軟件安裝的過(guò)程中,在下圖所示的界面中選擇第二個(gè)選項(xiàng)。

??在下圖所示的界面中,選擇第一個(gè)選項(xiàng)。

??在下圖所示的界面中,進(jìn)行如下的配置。

??在下圖所示的界面中,進(jìn)行如下的配置。

??在下圖所示的界面中,進(jìn)行如下的配置。

??在下圖所示的界面中,進(jìn)行如下的配置。

??隨后,在下圖所示的界面中,首先找到第一個(gè)選項(xiàng)。

??將其展開(kāi)后,找到帶有proj字樣的那一行。

??這里要注意,只要確保帶有proj字樣的那一行的New列中,出現(xiàn)庫(kù)的版本號(hào)即可,其他行的這一列都是顯示為Skip即可。

??隨后,如果出現(xiàn)下圖所示的提示,按照其推薦設(shè)置進(jìn)行配置即可。當(dāng)然,如果我們前面選擇了只下載PROJ庫(kù)的話一般并不會(huì)出現(xiàn)這個(gè)提示;如果下載時(shí)選中的庫(kù)比較多,則可能會(huì)出現(xiàn)這個(gè)。

??隨后,即可開(kāi)始下載。

??稍等片刻,將下載完畢。

??到這里,PROJ庫(kù)的官網(wǎng)就說(shuō)完成了這一庫(kù)的配置。但是通過(guò)這樣的方法,我一直沒(méi)有辦法找到庫(kù)對(duì)應(yīng)的數(shù)據(jù)文件或其路徑(比如前述lib、bininclude文件夾等的路徑)。所以最終還是選擇用方法一來(lái)實(shí)現(xiàn)PROJ庫(kù)的配置了。

2.4 GDAL配置

??完成了以上所有的操作,終于可以開(kāi)始GDAL庫(kù)的配置了。

??首先,依然是在其官方下載網(wǎng)站https://gdal.org/download.html)中進(jìn)行源代碼的下載。

??隨后,將下載得到的壓縮包文件解壓。

??隨后,找到其中的nmake.opt文件,并用Visual Studio軟件打開(kāi)。

??隨后,在其42行左右(具體行數(shù)可能會(huì)隨著GDAL庫(kù)版本的不同而不同)的位置,將等號(hào)后的數(shù)字修改為自己Visual Studio軟件的_MSC_VER值。如果大家不知道自己Visual Studio軟件的這一個(gè)值是多少,可以參考文章Visual Studio軟件_MSC_VER數(shù)值(MSVC編譯器版本)的獲取http://m.itdecent.cn/p/d9c7130e574b)。

??接下來(lái),在66行左右的位置,將這一路徑設(shè)置為自己希望編譯后GDAL庫(kù)存放的路徑。

??隨后,在130行左右的位置,如果大家需要編譯的是Debug版本的GDAL庫(kù),則將等號(hào)后的數(shù)字修改為1即可;我們這里需要編譯的是Release版本的GDAL庫(kù),就不用修改。

??隨后,在213行左右的位置,如果我們的電腦是64位的Windows系統(tǒng),就將這一行的注釋取消掉即可。

??接下來(lái),在245行左右的位置,如果需要動(dòng)態(tài)編譯就不用修改,如果需要靜態(tài)編譯就將等號(hào)后的數(shù)字修改為0。一般我們選擇靜態(tài)編譯即可,因此將其修改為0

??接下來(lái),在265行左右,需要我們配置PROJ庫(kù)的一些路徑。

??其中,第一個(gè)路徑是前面我們?cè)?strong>CMake軟件中設(shè)置了CMAKE_INSTALL_PREFIX所對(duì)應(yīng)的文件夾路徑下,include文件夾的路徑;第二個(gè)路徑是這一文件夾中,lib文件夾中proj.lib文件的路徑。如下圖所示。

??這兩行配置完畢,如下圖所示。

??最后,在638行左右,需要我們配置SQLite環(huán)境的一些路徑。

??其中,這里所涉及的文件夾,是前面提到的SQLite環(huán)境所下載的三個(gè)壓縮包文件解壓后所存放的文件夾中,我們新建的、分別命名為include、libbin的那三個(gè)文件夾。其中,將include文件夾的路徑放在第一個(gè)位置,將lib文件夾中的MySQLite.lib文件的路徑放在第二個(gè)位置。

??配置完畢后,如下圖所示。

??隨后,保存當(dāng)前nmake.opt文件,并再一次打開(kāi)“x64 Native Tools Command Prompt for VS 2022”軟件,cd進(jìn)入剛剛解壓得到的GDAL庫(kù)文件夾(也就是nmake.opt文件所在的那個(gè)文件夾,這一文件夾下還有一個(gè)名為makefile.vc的文件,如下圖所示)。

??隨后,對(duì)于我們需要的Release版本,輸入如下代碼并運(yùn)行。

nmake /f makefile.vc

??運(yùn)行后得到如下圖所示的結(jié)果。

??隨后,輸入如下所示的代碼并運(yùn)行。

nmake /f makefile.vc devinstall

??運(yùn)行后得到如下圖所示的結(jié)果。

??如果需要的是Debug版本的GDAL庫(kù),那么不用輸入以上兩句代碼,直接分別輸入并運(yùn)行以下三句代碼即可。

nmake /f makefile.vc WIN64=YES DEBUG=1
nmake /f makefile.vc install
nmake /f makefile.vc devinstall

??此時(shí),在我們剛剛于nmake.opt文件66行左右處所設(shè)定的GDAL庫(kù)存放路徑(如下圖所示)中,可以看到已經(jīng)自動(dòng)生成了相關(guān)的文件夾,如下下圖所示。

??以上,即完成了GDAL庫(kù)的配置。

3 配置測(cè)試

??接下來(lái),我們需要檢查一下GDAL庫(kù)是否可以使用。

??我們?cè)?strong>Visual Studio軟件中新建一個(gè)項(xiàng)目,并寫(xiě)一段需要調(diào)用GDAL庫(kù)的代碼;本文就用下面這個(gè)很簡(jiǎn)單的一段代碼來(lái)驗(yàn)證GDAL庫(kù)是否可用。

#include <iostream>
#include <gdal.h>
#include <gdal_priv.h>
using namespace std;

int main() {
    GDALDataset* poDataset;
    GDALAllRegister();
    poDataset = (GDALDataset*)GDALOpen("pic.tif", GA_ReadOnly);
    if (poDataset == NULL)
    {
        cout << "找不到文件,但說(shuō)明GDAL可以用了";
    }
    return 0;
}

??其中需要注意,如果我們需要調(diào)用GDAL庫(kù),就需要在代碼開(kāi)頭通過(guò)以下代碼引入相關(guān)的頭文件。

#include <gdal.h>
#include <gdal_priv.h>

??隨后,首先按照文章Visual Studio調(diào)用環(huán)境配置完畢的第三方庫(kù)的方法http://m.itdecent.cn/p/ec307cf18828)中提到的方法,在Visual Studio軟件中配置好相應(yīng)的屬性設(shè)置。

??接下來(lái),將剛剛于nmake.opt文件66行左右處所設(shè)定的GDAL庫(kù)存放路徑中的bin文件夾,與PROJ庫(kù)配置好后在其指定文件夾(即CMake軟件中設(shè)置了CMAKE_INSTALL_PREFIX所對(duì)應(yīng)的文件夾)中生成的share文件夾,分別放于系統(tǒng)變量的PATH中;具體方法可以參考文章Windows 10用戶變量、系統(tǒng)變量等環(huán)境變量新建、編輯修改與刪除的方法http://m.itdecent.cn/p/1810d3dea4d3)。

??配置好后如下圖最后兩行所示。

??這里如果不配置環(huán)境變量的話,在運(yùn)行調(diào)用GDAL庫(kù)的代碼時(shí),會(huì)出現(xiàn)如下圖所示的錯(cuò)誤或類似錯(cuò)誤。

??完成以上操作后,運(yùn)行代碼。此時(shí),有可能出現(xiàn)找不到proj_9_1.dll文件的錯(cuò)誤;如下圖所示。

??針對(duì)這一情況,我們只需要將編譯好后的PROJ庫(kù)中的這一文件復(fù)制。

??并粘貼至當(dāng)前調(diào)用GDAL庫(kù)的項(xiàng)目的文件夾中即可。

??隨后,運(yùn)行程序,即可成功調(diào)用GDAL庫(kù)。

??至此,大功告成~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容