??本文介紹在Visual Studio軟件中配置迎膜、編譯C++ 環(huán)境下GDAL
庫、SQLite
環(huán)境與PROJ
庫的詳細(xì)方法秒旋。
??GDAL
庫是一個非常方便的地理數(shù)據(jù)處理庫痴柔,但其在C++ 環(huán)境下的配置與編譯流程較為復(fù)雜竞滓;尤其是最新的GDAL 3
及以上版本咐吼,其在C++ 環(huán)境中的配置更是首先需要滿足許多其他的環(huán)境配置條件(包括SQLite
環(huán)境、CMake軟件與PROJ
庫)商佑,使得其配置變得更復(fù)雜一些锯茄。本文就詳細(xì)介紹在Visual Studio軟件中,配置GDAL
庫所需的環(huán)境莉御,并最終配置撇吞、編譯GDAL
庫的方法。
1 寫在前面
??首先礁叔,本文是基于Visual Studio 2022軟件進(jìn)行的配置牍颈;其中,GDAL
庫版本為3.5.2
琅关,SQLite
環(huán)境版本為3.39.4
煮岁,PROJ
庫版本為9.1.0
。此外涣易,在配置過程中還需要用到跨平臺編譯工具CMake軟件画机,其版本為3.24.2
。如果大家安裝的是以上庫新症、環(huán)境或軟件的其他版本步氏,也可以參考本文,因為整體流程都是近似的徒爹;但可能部分操作的細(xì)節(jié)會稍微有一些差異荚醒。
??其次,在編譯PROJ
庫時發(fā)現(xiàn)隆嗅,可能是由于PROJ
庫最新的9.1.0
版本的自身要求界阁,只能編譯Release
版本的PROJ
庫;若編譯Debug
版本則會報錯胖喳;而同時泡躯,SQLite
環(huán)境、PROJ
庫與最終的GDAL
庫需要保持一致(即三者要么都是Release
版本,要么都是Debug
版本)较剃。因此咕别,本文最終選擇了配置Release
版本的GDAL
庫;但最終測試代碼時發(fā)現(xiàn)写穴,在Visual Studio軟件中無論是Release
模式還是Debug
模式顷级,都可以成功調(diào)用配置好的Release
版本的GDAL
庫。所以确垫,本文就主要介紹Release
版本的GDAL
庫的配置方法,但也會在對應(yīng)流程處注明如果想配置Debug
版本的GDAL
庫,該如何設(shè)置。
2 具體配置
??配置GDAL
庫首先需要準(zhǔn)備好PROJ
庫憔古,而PROJ
庫的配置則需要準(zhǔn)備好SQLite
環(huán)境與CMake軟件(這些似乎是GDAL 3
及以上版本才需要的耐床,網(wǎng)上很多GDAL 2
版本的配置教程都沒有這么麻煩的準(zhǔn)備工作);因此我們首先逐一配置好上述這些額外需要的環(huán)境或軟件绣版。
2.1 SQLite配置
??首先,我們進(jìn)行SQLite
環(huán)境的配置。SQLite
是一個由C語言撰寫的數(shù)據(jù)庫引擎款票,其為后續(xù)需要配置的PROJ
庫提供了數(shù)據(jù)支持,同時配置GDAL
庫也會用到這一環(huán)境泽论。
??首先艾少,我們進(jìn)入SQLite
的官方下載網(wǎng)站(https://www.sqlite.org/download.html),并下載“Source Code”中的第一項sqlite-amalgamation-3390400
翼悴,以及“Precompiled Binaries for Windows”中的第二項sqlite-dll-win64-x64-3390400
與第三項sqlite-tools-win32-x86-3390400
缚够,一共是三個文件,如下圖所示鹦赎。這里需要注意谍椅,隨著SQLite
版本的更新,上述三個文件名稱最后面的一長串?dāng)?shù)字會隨著改變古话,大家只需要對照好文件名稱前面的字樣即可雏吭。
??隨后,將上述下載好的三個壓縮包文件解壓到同一個文件夾下(下圖是我在配置完SQLite
環(huán)境之后截的圖陪踩,因此文件夾的個數(shù)與名稱和大家的會有一些差異)杖们。
??隨后,打開Visual Studio軟件膊毁,新建一個項目胀莹。我這里因為Visual Studio軟件原本就是開著的,所以就可以選擇“文件”→“新建”→“項目...”婚温。
??隨后描焰,選擇“空項目”,并選擇“下一步”。
??配置好“項目名稱”與“位置”荆秦。其中篱竭,“項目名稱”我在這里配置為MySQLite
,“位置”就選擇剛剛我們解壓縮三個文件的文件夾即可步绸。
??隨后掺逼,分別在“頭文件”與“源文件”處右鍵,通過“添加”→“現(xiàn)有項...”的方法瓤介,將剛剛解壓縮得到文件中的sqlite3.h
與sqlite3ext.h
文件放入“頭文件”吕喘,并將sqlite3.c
與sqlite3.def
文件放入“源文件”。
??完成后如下圖所示刑桑。
??接下來氯质,選中項目名稱MySQLite
,并選擇“屬性”→“配置屬性”→“常規(guī)”祠斧,選擇“配置類型”,將其選擇為靜態(tài)庫(.lib)
烛芬,并在上方的“配置”與“平臺”中將二者選擇為“所有配置”與“所有平臺”。
??接下來鹏浅,在“C/C++”→“預(yù)處理器”中季希,設(shè)置“預(yù)處理器定義”武学。
??在其中復(fù)制如下代碼即可曲掰。
_USRDLL
SQLITE_ENABLE_RTREE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_FTS5
SQLITE_ENABLE_UNLOCK_NOTIFY
??復(fù)制后如下圖所示。
??接下來,在“鏈接器”→“輸入”中配置“模塊定義文件”坟瓢。
??找到剛剛解壓縮得到的sqlite3.def
文件,按下Shift
按鈕并右鍵首懈,選擇“復(fù)制文件地址”。
??并將其粘貼至“模塊定義文件”中。
??接下來官辽,在Visual Studio軟件中蛹磺,打開sqlite3.def
文件,在其最后一行添加如下的代碼同仆。
sqlite3_unlock_notify
??如下圖所示称开。
??接下來,在上圖最上方的紅色方框處乓梨,將原來的Debug
修改為Release
鳖轰,如下圖所示;表示我們接下來將配置Release
版本的SQLite
環(huán)境扶镀。如果大家需要Debug
版本蕴侣,那么這里就還是保持選中Debug
即可。
??接下來臭觉,選中項目名稱昆雀,并右鍵選擇“生成”辱志。
??接下來,Visual Studio軟件將生成項目狞膘。
??此時揩懒,在前面提到的SQLite
環(huán)境所下載的三個壓縮包文件解壓后所存放的文件夾中,我們新建三個文件夾挽封,分別命名為include
已球、lib
與bin
。
??隨后辅愿,首先在剛剛生成的項目的x64\Release
文件夾中智亮,找到MySQLite.lib
文件。這里如果大家剛剛生成的是Debug
版本的項目点待,那么就是在Debug
文件夾中阔蛉。
??隨后,將其復(fù)制到剛剛新建的lib
文件夾中癞埠。
??接下來状原,將sqlite-amalgamation-3390400
文件夾中的sqlite3.h
與sqlite3ext.h
文件復(fù)制。
??將其粘貼至剛剛新建立的include
文件夾中苗踪。
??隨后遭笋,將sqlite-tools-win32-x86-3390400
文件夾中的sqlite.exe
文件復(fù)制。
??粘貼至剛剛新建立的bin
文件夾中徒探。
??以上,即完成了SQLite
環(huán)境的配置喂窟。
2.2 CMake配置
??接下來测暗,我們開始對CMake軟件進(jìn)行配置。CMake軟件是一個跨平臺的編譯軟件磨澡,在后期進(jìn)行PROJ
庫配置時需要用到碗啄。
??首先,我們還是在其官方下載網(wǎng)站(https://cmake.org/download/)進(jìn)行軟件的下載稳摄。這里我們下載其“Binary distributions”中的第一項即可稚字。
??下載完畢后,可以看到其安裝包厦酬。
??雙擊安裝包胆描,進(jìn)行軟件的安裝即可。這里需要注意仗阅,安裝過程中昌讲,在以下窗口中我們需要選擇第三項,并勾選中最下方的勾選項减噪,如下圖所示短绸。
??以上车吹,即完成了CMake軟件的配置。
2.3 PROJ配置
??接下來醋闭,我們開始PROJ
庫的配置窄驹。PROJ
庫是一個地理坐標(biāo)轉(zhuǎn)換庫,用以處理不同的地理坐標(biāo)數(shù)據(jù)证逻;因為我們要安裝的GDAL
庫是一個地理數(shù)據(jù)處理庫乐埠,因此其固然需要PROJ
這一地理坐標(biāo)轉(zhuǎn)換庫來完成各項地理數(shù)據(jù)操作。
??PROJ
庫的配置有兩種方法——第一種是傳統(tǒng)方法瑟曲,即用庫的源代碼來進(jìn)行編譯饮戳;第二種是PROJ
庫官網(wǎng)比較推薦的新方法,即用OSGeo4W軟件來進(jìn)行PROJ
庫的下載與編譯洞拨。盡管PROJ
庫官網(wǎng)目前推薦用第二種方法來配置扯罐,但是我一直沒有找到第二種方法配置PROJ
庫完畢后其所生成的數(shù)據(jù)文件,導(dǎo)致沒有辦法進(jìn)行后續(xù)GDAL
庫的配置烦衣;另一方面歹河,若采用第二種方法,OSGeo4W軟件在下載PROJ
庫時經(jīng)常會出現(xiàn)網(wǎng)絡(luò)問題導(dǎo)致的下載終止花吟,且想要再下載還只能重新開始秸歧,非常耽誤時間。因此衅澈,我個人還是建議大家用第一種方法(也就是下文中的方法一)來實現(xiàn)键菱;雖然這種方法操作起來比較麻煩,但至少比較穩(wěn)定今布,而且可以保證后續(xù)GDAL
庫的配置是可以實現(xiàn)的经备。同時,本文也將并不推薦的第二種方法的操作流程介紹一下部默,如果大家感興趣可以研究一下第二種方法侵蒙。
2.3.1 方法一
??首先,我們在PROJ
庫的官方下載網(wǎng)站(https://proj.org/download.html)中下載其源代碼傅蹂。
??在官網(wǎng)纷闺,我們還可以看到官方將這種從源代碼編譯的方法稱作“傳統(tǒng)方法”。
??隨后份蝴,將下載后的壓縮包解壓犁功,并在解壓后得到的文件夾中新建立一個build
文件夾。
??接下來婚夫,打開我們剛剛下載波桩、安裝好的CMake軟件,并在下圖所示的兩個編輯欄中请敦,分別選定解壓后的PROJ
庫文件夾與我們剛剛在其中新建的build
文件夾镐躲;隨后储玫,點擊“Configue”。
??隨后萤皂,在彈出的窗口中配置我們的Visual Studio軟件版本撒穷,并在第二個選項中選擇處理器的架構(gòu),一般選擇x64
即可裆熙。
??隨即端礼,CMake軟件開始運行第一次配置。稍等片刻入录,一般會出現(xiàn)滿屏幕的紅色蛤奥,如下圖所示。
??其中僚稿,我們需要修改一下上圖中藍(lán)色方框內(nèi)的五條數(shù)據(jù)凡桥。首先,我們在解壓后的PROJ
庫文件夾中蚀同,新建GTest
文件夾缅刽。
??并將其作為GTest_DIR
后所對應(yīng)的數(shù)據(jù)。
??接下來蠢络,在CMAKE_INSTALL_PREFIX
中衰猛,配置一個我們后期將要存放PROJ
庫的路徑;接下來的三個數(shù)據(jù)刹孔,我們分別選擇前面配置SQLite
環(huán)境時啡省,所得到的bin
文件夾中的sqlite3.exe
文件、include
文件夾與MySQLite.lib
文件的路徑髓霞。具體配置如下圖所示卦睹。
??隨后,再點擊一次“Configue”酸茴。
??稍等片刻,待其配置完成后兢交,再點擊“Generate”薪捍;如上圖所示。
??待其生成完畢后配喳,我們可以在剛剛解壓后的PROJ
庫文件夾中新建的build
文件夾中酪穿,看到如下所示的.sln
文件。
??隨后晴裹,在開始菜單中找到位于Visual Studio 2022軟件下的“x64 Native Tools Command Prompt for VS 2022”軟件被济。
??首先,cd進(jìn)入PROJ
庫文件夾中剛剛新建的build
文件夾涧团。這里大家依據(jù)剛剛自己設(shè)定的文件夾路徑來cd進(jìn)入即可只磷。
cd C:\proj-9.1.0\build
??接下來经磅,輸入如下的代碼,并回車運行钮追。
msbuild ALL_BUILD.vcxproj /p:Configuration="Release"
??其中预厌,上述代碼中="Release"
表示我們將編譯Release
版本的PROJ
庫;如果大家需要編譯Debug
版本的庫元媚,則將其修改為="Debug"
即可轧叽。
??這里我們提一句,本文開頭之所以說最終只能編譯Release
版本的PROJ
庫刊棕,是因為一旦前面的代碼我們選擇編譯Debug
版本炭晒,則其運行后會報錯,出現(xiàn)如下所示的情況甥角。
??其中网严,這里不同的錯誤,都表明我們目前只能配置Release
版本的PROJ
庫蜈膨。
??因此屿笼,我在這里最終選擇編譯Release
版本的PROJ
庫。雖然選擇編譯Release
版本的PROJ
庫在這里也會有警告出現(xiàn)翁巍,但這并不影響最后的結(jié)果驴一。
??接下來,我們繼續(xù)輸入如下所示的代碼灶壶。
msbuild INSTALL.vcxproj /p:Configuration="Release"
??其中肝断,如果我們需要編譯Debug
版本的庫,則將其修改為="Debug"
即可驰凛。
??運行代碼胸懈,得到結(jié)果如下。
??此時恰响,前面提到我們在CMake軟件中設(shè)置了CMAKE_INSTALL_PREFIX
所對應(yīng)的文件夾路徑趣钱。
??在這個路徑中,此時我們可以看到其已經(jīng)自動生成了bin
胚宦、include
首有、lib
與share
等四個文件夾。
??以上枢劝,即完成了PROJ
庫的配置井联。
2.3.2 方法二
??這里我們介紹一下PROJ
庫的第二種配置方法。但前面我們也提到您旁,并不推薦這種方法烙常,大家如果有需要參考一下即可。如果前面已經(jīng)通過方法一實現(xiàn)了PROJ
庫的配置鹤盒,那么直接跳過這里蚕脏,繼續(xù)閱讀本文2.4部分即可侦副。
??首先,我們按照官方所給出的OSGeo4W軟件下載路徑蝗锥,進(jìn)行OSGeo4W軟件的下載跃洛。
??或者也可以直接從這里進(jìn)行下載:https://download.osgeo.org/osgeo4w/osgeo4w-setup.exe。
??接下來终议,進(jìn)行軟件安裝的過程中汇竭,在下圖所示的界面中選擇第二個選項。
??在下圖所示的界面中穴张,選擇第一個選項细燎。
??在下圖所示的界面中,進(jìn)行如下的配置皂甘。
??在下圖所示的界面中玻驻,進(jìn)行如下的配置。
??在下圖所示的界面中偿枕,進(jìn)行如下的配置璧瞬。
??在下圖所示的界面中,進(jìn)行如下的配置渐夸。
??隨后嗤锉,在下圖所示的界面中,首先找到第一個選項墓塌。
??將其展開后瘟忱,找到帶有proj
字樣的那一行。
??這里要注意苫幢,只要確保帶有proj
字樣的那一行的New
列中访诱,出現(xiàn)庫的版本號即可,其他行的這一列都是顯示為Skip
即可韩肝。
??隨后触菜,如果出現(xiàn)下圖所示的提示,按照其推薦設(shè)置進(jìn)行配置即可哀峻。當(dāng)然涡相,如果我們前面選擇了只下載PROJ
庫的話一般并不會出現(xiàn)這個提示;如果下載時選中的庫比較多谜诫,則可能會出現(xiàn)這個漾峡。
??隨后攻旦,即可開始下載喻旷。
??稍等片刻,將下載完畢牢屋。
??到這里且预,PROJ
庫的官網(wǎng)就說完成了這一庫的配置槽袄。但是通過這樣的方法,我一直沒有辦法找到庫對應(yīng)的數(shù)據(jù)文件或其路徑(比如前述lib
锋谐、bin
與include
文件夾等的路徑)遍尺。所以最終還是選擇用方法一來實現(xiàn)PROJ
庫的配置了。
2.4 GDAL配置
??完成了以上所有的操作涮拗,終于可以開始GDAL
庫的配置了乾戏。
??首先,依然是在其官方下載網(wǎng)站(https://gdal.org/download.html)中進(jìn)行源代碼的下載三热。
??隨后鼓择,將下載得到的壓縮包文件解壓。
??隨后就漾,找到其中的nmake.opt
文件呐能,并用Visual Studio軟件打開。
??隨后抑堡,在其42
行左右(具體行數(shù)可能會隨著GDAL
庫版本的不同而不同)的位置摆出,將等號后的數(shù)字修改為自己Visual Studio軟件的_MSC_VER
值。如果大家不知道自己Visual Studio軟件的這一個值是多少首妖,可以參考文章Visual Studio軟件_MSC_VER數(shù)值(MSVC編譯器版本)的獲取(http://www.reibang.com/p/d9c7130e574b)偎漫。
??接下來,在66
行左右的位置悯搔,將這一路徑設(shè)置為自己希望編譯后GDAL
庫存放的路徑骑丸。
??隨后,在130
行左右的位置妒貌,如果大家需要編譯的是Debug
版本的GDAL
庫通危,則將等號后的數(shù)字修改為1
即可;我們這里需要編譯的是Release
版本的GDAL
庫灌曙,就不用修改菊碟。
??隨后,在213
行左右的位置在刺,如果我們的電腦是64
位的Windows系統(tǒng)逆害,就將這一行的注釋取消掉即可。
??接下來蚣驼,在245
行左右的位置魄幕,如果需要動態(tài)編譯就不用修改,如果需要靜態(tài)編譯就將等號后的數(shù)字修改為0
颖杏。一般我們選擇靜態(tài)編譯即可纯陨,因此將其修改為0
。
??接下來,在265
行左右翼抠,需要我們配置PROJ
庫的一些路徑咙轩。
??其中,第一個路徑是前面我們在CMake軟件中設(shè)置了CMAKE_INSTALL_PREFIX
所對應(yīng)的文件夾路徑下阴颖,include
文件夾的路徑活喊;第二個路徑是這一文件夾中,lib
文件夾中proj.lib
文件的路徑量愧。如下圖所示钾菊。
??這兩行配置完畢,如下圖所示偎肃。
??最后结缚,在638
行左右,需要我們配置SQLite
環(huán)境的一些路徑软棺。
??其中红竭,這里所涉及的文件夾,是前面提到的SQLite
環(huán)境所下載的三個壓縮包文件解壓后所存放的文件夾中喘落,我們新建的茵宪、分別命名為include
、lib
與bin
的那三個文件夾瘦棋。其中稀火,將include
文件夾的路徑放在第一個位置,將lib
文件夾中的MySQLite.lib
文件的路徑放在第二個位置赌朋。
??配置完畢后凰狞,如下圖所示。
??隨后沛慢,保存當(dāng)前nmake.opt
文件赡若,并再一次打開“x64 Native Tools Command Prompt for VS 2022”軟件,cd進(jìn)入剛剛解壓得到的GDAL
庫文件夾(也就是nmake.opt
文件所在的那個文件夾团甲,這一文件夾下還有一個名為makefile.vc
的文件逾冬,如下圖所示)。
??隨后躺苦,對于我們需要的Release
版本身腻,輸入如下代碼并運行。
nmake /f makefile.vc
??運行后得到如下圖所示的結(jié)果匹厘。
??隨后嘀趟,輸入如下所示的代碼并運行。
nmake /f makefile.vc devinstall
??運行后得到如下圖所示的結(jié)果愈诚。
??如果需要的是Debug
版本的GDAL
庫她按,那么不用輸入以上兩句代碼坡椒,直接分別輸入并運行以下三句代碼即可。
nmake /f makefile.vc WIN64=YES DEBUG=1
nmake /f makefile.vc install
nmake /f makefile.vc devinstall
??此時尤溜,在我們剛剛于nmake.opt
文件66
行左右處所設(shè)定的GDAL
庫存放路徑(如下圖所示)中,可以看到已經(jīng)自動生成了相關(guān)的文件夾汗唱,如下下圖所示宫莱。
??以上,即完成了GDAL
庫的配置哩罪。
3 配置測試
??接下來授霸,我們需要檢查一下GDAL
庫是否可以使用。
??我們在Visual Studio軟件中新建一個項目际插,并寫一段需要調(diào)用GDAL
庫的代碼碘耳;本文就用下面這個很簡單的一段代碼來驗證GDAL
庫是否可用。
#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 << "找不到文件框弛,但說明GDAL可以用了";
}
return 0;
}
??其中需要注意辛辨,如果我們需要調(diào)用GDAL
庫,就需要在代碼開頭通過以下代碼引入相關(guān)的頭文件瑟枫。
#include <gdal.h>
#include <gdal_priv.h>
??隨后斗搞,首先按照文章Visual Studio調(diào)用環(huán)境配置完畢的第三方庫的方法(http://www.reibang.com/p/ec307cf18828)中提到的方法,在Visual Studio軟件中配置好相應(yīng)的屬性設(shè)置慷妙。
??接下來,將剛剛于nmake.opt
文件66
行左右處所設(shè)定的GDAL
庫存放路徑中的bin
文件夾,與PROJ
庫配置好后在其指定文件夾(即CMake軟件中設(shè)置了CMAKE_INSTALL_PREFIX
所對應(yīng)的文件夾)中生成的share
文件夾贝咙,分別放于系統(tǒng)變量的PATH
中鸳慈;具體方法可以參考文章Windows 10用戶變量、系統(tǒng)變量等環(huán)境變量新建架馋、編輯修改與刪除的方法(http://www.reibang.com/p/1810d3dea4d3)狞山。
??配置好后如下圖最后兩行所示。
??這里如果不配置環(huán)境變量的話叉寂,在運行調(diào)用GDAL
庫的代碼時铣墨,會出現(xiàn)如下圖所示的錯誤或類似錯誤。
??完成以上操作后办绝,運行代碼伊约。此時,有可能出現(xiàn)找不到proj_9_1.dll
文件的錯誤孕蝉;如下圖所示屡律。
??針對這一情況,我們只需要將編譯好后的PROJ
庫中的這一文件復(fù)制降淮。
??并粘貼至當(dāng)前調(diào)用GDAL
庫的項目的文件夾中即可超埋。
??隨后搏讶,運行程序,即可成功調(diào)用GDAL
庫霍殴。
??至此媒惕,大功告成~