更新:最近寫了個3.18.3版本的編譯教程,沒有出現(xiàn)任何問題。
QGIS3.18編譯教程_程序員班長的博客-CSDN博客
環(huán)境:VS2019+OSGeo4W+CMake_3.26+Cygwin64+QGIS_3.28
注意:一定要按照步驟順序來!
一、配置環(huán)境
(一)VS2019
VS2019下載鏈接https://my.visualstudio.com/Downloads?q=visual%20studio%202019&wt.mc_id=o~msft~vscom~older-downloads下載完成之后安裝即可,這里選擇的是免費社區(qū)版。安裝的時候選擇的組件為“使用C++的桌面開發(fā)”和“通用Windows平臺開發(fā)”。
(二)OSGeo4W
OSGeo4W下載地址https://download.osgeo.org/osgeo4w/v2/osgeo4w-setup.exe下載完畢后進行安裝,選擇Advanced Install,注意中間選擇網(wǎng)絡的時候選擇直接連接即可。
?進去后搜索:qgis-ltr-deps,然后選擇ltr分支的3.28版本,直接下一步安裝即可。
?安裝時會默認幫我們把依賴包也一同安裝,安裝完畢如圖所示。
(三)Cygwin64
Cygwin64下載地址https://www.cygwin.com/setup-x86_64.exe
?下載完畢進行安裝,同樣選擇直接連接的方式。
?安裝bison和flex
?
安裝完畢即可。?
(四)QGIS_3.28
下載QGIS_3.28的源碼包
QGIS_3.28源碼下載地址https://qgis.org/downloads/qgis-latest-ltr.tar.bz2
?下載完畢后,解壓到自定義目錄,我這里解壓到了OSGeo4W的根目錄。
(五)CMake_3.26
CMake下載地址:Download | CMakehttps://cmake.org/download/
?下載完安裝即可。
二、CMake搭建工程
(一)配置環(huán)境變量
首先配置一下環(huán)境變量,這里有兩種方式。
1、第一種方式
新建一個bat文件,然后里面填入如下內(nèi)容。
@echo off
set VS190COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Windows Kits\10\Include
set LIB=%LIB%;C:\Program Files (x86)\Windows Kits\10\Lib
set OSGEO4W_ROOT=D:\OSGeo4W
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python39
SET PYTHONPATH=%PYTHONHOME%;%PYTHONHOME%\Scripts
set PYTHON_EXECUTABLE=%PYTHONHOME%/python3.exe
PATH %PYTHONPATH%;%PATH%
path %OSGEO4W_ROOT%\apps\qt5\bin;%PATH%
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\Qt5\plugins
set O4W_QT_PREFIX=%OSGEO4W_ROOT:\=/%/apps/Qt5
set O4W_QT_BINARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/bin
set O4W_QT_PLUGINS=%OSGEO4W_ROOT:\=/%/apps/Qt5/plugins
set O4W_QT_LIBRARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/lib
set O4W_QT_TRANSLATIONS=%OSGEO4W_ROOT:\=/%/apps/Qt5/translations
set O4W_QT_HEADERS=%OSGEO4W_ROOT:\=/%/apps/Qt5/include
set O4W_ROOT=%OSGEO4W_ROOT:\=/%
set LIB_DIR=%O4W_ROOT%
path %path%;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.16.27023\bin
path %PATH%;D:\OSGeo4W\apps\Qt5\bin;C:\cygwin64\bin
@set GRASS_PREFIX=D:\OSGeo4W\apps\grass\grass83
@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
@set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib
set LIB=%LIB%;%OSGEO4W_ROOT%\apps\Qt5\lib;%OSGEO4W_ROOT%\lib
set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\apps\Qt5\include;%OSGEO4W_ROOT%\include
call "C:\Program Files\CMake\bin\cmake-gui.exe"
記得把里面的路徑改成自己的,最后一行代碼的意思的打開cmake軟件。
修改完畢后保存,然后使用管理員命令打開?Windows PowerShell,運行這個bat文件。
?然后運行完畢會彈出來Cmake的窗口。
2、第二種方式
打開VS2019自帶的x64 Native Tools Command Prompt for VS 2019
然后把上面bat文件的命令全部復制粘貼過來就可以了,我更推薦使用這一種方法(后面有提到原因)。
(二)第一次Configure
?彈出來CMake的界面后,先選擇QGIS_3.28源代碼的存放路徑,再選擇項目編譯輸出的目標路徑,然后點擊Configure。
(三)修復錯誤?
如果報錯,需要修復這些錯誤。我的錯誤有四個,分別是
Could not find GRASS 7
Could not find GRASS 8
ImportError: DLL load failed while importing Qsci:找不到對應模塊
Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
1、設(shè)置GRASS的路徑
對于第一個和第二個問題,解決方式也很簡單,進入到OSGeo4W的安裝目錄,進入\apps\grass文件夾,看到我們安裝的grass版本是grass83
然后在 CMake的GRASS_PREFIX8的選項填入我們的路徑 D:\OSGeo4W\apps\grass\grass83,如果你的版本是grass7*,那就填到GRASS_PREFIX7的位置。7和8選填一個即可。
2、安裝Python庫qscintilla
第三個問題是
ImportError: DLL load failed while importing Qsci:找不到對應模塊
?對于這個問題的解決方法,需要安裝一個第三方庫
pip install qscintilla -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
?但是呢,由于通過第一種方式設(shè)置的環(huán)境變量并不能對外部生效,所以我們的pip是執(zhí)行不了的。第二種方式就可以順利執(zhí)行pip命令。
直接在x64 Native Tools Command Prompt for VS 2019中輸入上面安裝庫的代碼即可。
?安裝完畢的結(jié)果如下,輸入命令pip list可以看到qscintilla包安裝成功。
對于第四個問題,由于QGIS項目在Windows下沒有用到PkgConfig,因此可以忽略。這里提供下解決方法。
Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)
出現(xiàn)這個問題的原因是我們的Windows系統(tǒng)沒有安裝pkg-config,需要進行安裝,再設(shè)置一下環(huán)境變量。
3、安裝pkg-config
pkg-config安裝過程如下
(1)用管理員權(quán)限打開Windows PowerShell命令行界面;
(2)輸入命令,然后選擇A;
Set-ExecutionPolicy AllSigned
(3) 輸入命令,choco安裝完成;
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))
(4) 輸入命令安裝pkg-config,安裝完畢會顯示安裝的路徑;
choco install pkgconfiglite
(5)設(shè)置pkgconfig的環(huán)境變量,在安裝路徑找到pkg-config.exe的路徑,我的路徑是C:\ProgramData\chocolatey\lib\pkgconfiglite\tools\pkg-config-lite-0.28-1\bin
?然后設(shè)置環(huán)境變量,在系統(tǒng)變量里面增加一條環(huán)境變量
名稱為PKG_CONFIG_PATH,值為pkg-config.exe的路徑
設(shè)置完畢重啟電腦,重啟完電腦需要重新執(zhí)行第2.1步的配置環(huán)境變量。
?如果你沒有修改環(huán)境變量,就無需重啟電腦。?如果沒有關(guān)閉x64 Native Tools Command Prompt for VS 2019,但是Cmake已經(jīng)關(guān)閉,那么就再次輸入下面的命令來打開CMake軟件。
call "C:\Program Files\CMake\bin\cmake-gui.exe"
(四)修復完錯誤點擊Configure
在CMake窗口中再次點擊Configure即可,出現(xiàn)Configuring done。注意:出現(xiàn)Configuring done不一定代表沒問題,一定要檢查輸出日志!
(五)點擊Generate,并打開項目
出現(xiàn)Generating?done即可。然后點擊Open Project,會自動打開VS2019,然后加載QGIS項目。
三、在VS2019中打開工程
(一)將環(huán)境切換為Release
項目加載完成后,將環(huán)境切換到Release,因為就算是Debug環(huán)境,編譯出來的程序也無法運行。
(二) 編譯
在解決方案ALL_BUILD上點擊鼠標右鍵,點擊生成,這一步耗費的時間有點長,需要耐心等待。
編譯有一個失敗的項目,叫python_module_qgis__gui,提示如下,導致運行程序的時候Python環(huán)境不能正確加載,目前還沒找到原因。不使用Python的話可以忽略。
?(三)設(shè)置啟動項目
設(shè)置qgis為啟動項目
?(四)設(shè)置調(diào)試環(huán)境
在解決方案qgis上點擊鼠標右鍵----屬性----調(diào)試----環(huán)境中輸入QT5的bin路徑和plugins路徑
?(五)運行程序
點擊“本地Windows調(diào)試器運行程序”,運行程序。
如果啟動qgis.exe時報qgis_app.dll無法加載或找不到的問題,而該dll又在該目錄下,原因是調(diào)用qgis_app.dll時所依賴的其他dll未加載。
解決方法 :將D:\OSGeo4W\bin下的dll文件,以及D:\OSGeo4W\apps\Qt5\bin下的dll文件全部拷貝到qgis.exe所在目錄即可,這個目錄在CMake設(shè)置的build目錄下的output\bin\Release目錄下,我這里是D:\OSGeo4W\qgis_build\output\bin\Release。
?再次點擊“本地Windows調(diào)試器運行程序”,運行程序。
出現(xiàn)了一個error,是python環(huán)境的問題(編譯時出現(xiàn)了一個失敗,推測與其有關(guān)),如果不需要使用python編程,可以忽略,目前還沒找到解決方法。如果有哪位開發(fā)人員解決了這個問題,請告知,非常感謝!
?點擊Close可以進入主程序。
?到此配置完畢。
參考教程如下:
QGIS源碼編譯:QGIS3.22.4+vs2019_qgis源碼下載_guoqiong07的博客-CSDN博客文章來源:http://www.zghlxwxcb.cn/news/detail-619002.html
【程序員編程日記】QGIS+VS2019+QT5.14編譯_嗶哩嗶哩_bilibili文章來源地址http://www.zghlxwxcb.cn/news/detail-619002.html
到了這里,關(guān)于QGIS3.28的二次開發(fā)一:編譯工程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!