QGIS編譯---QGIS2.18.18 + Qt5.8.0 + VS2015(X64) + Python3.6

參考鏈接:

https://blog.csdn.net/octdream/article/details/70332428

https://blog.csdn.net/quinta_2018_01_09/article/details/79084001

https://www.cnblogs.com/xiaojian1987/p/8342104.html

1.安裝QT

QT官網下載:http://download.qt.io/archive/qt/

我安裝的QT 版本是:qt-opensource-windows-x86-msvc2015_64-5.8.0.exe

2.安裝VS2015 與QT 

參考鏈接: https://blog.csdn.net/lebusini/article/details/79901628

3.下載並安裝以下工具軟件

下載並安裝以下軟件包:

ToolWebsite
CMakehttps://cmake.org/files/v3.7/cmake-3.7.2-win64-x64.msi
GNU flex, GNU bison and GIThttp://cygwin.com/setup-x86.exe (32bit) or http://cygwin.com/setup-x86_64.exe (64bit)
OSGeo4Whttp://download.osgeo.org/osgeo4w/osgeo4w-setup-x86.exe (32bit) or http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe (64bit)
ninjahttps://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-win.zip

OSGeo4W不僅爲當前的QGIS發行版提供了準備好的軟件包,而且還爲每個主機的夜間構建提供了可用的軟件包,同時也提供了構建它的大部分依賴關係。如果用戶要要編譯32位的QGIS請用32位的OSGeo4w下載,如果用戶要要編譯64位的QGIS請用64位的OSGeo4w。32位的在下載時會下載32位的依賴庫,64位的在下載時會下載64位的依賴庫。

對於QGIS構建,您需要從cygwin安裝以下軟件包:

  • bison
  • flex
  • git

注:

  • flex和 bison可以從cygwin下載,但是要注意32位還是64位,32位的在下載時會下載32位的,64位的在下載時會下載64位的。安裝地址不要帶空格和中文。也可以從我提供的以下的鏈接直接下載解壓:

  • git可以不用下載,這個主要是用來下載QGIS源碼包的,下載QGIS源碼包我們要以從官網上下載。


qgis下載地址:https://qgis.org/downloads/

和OSGeo4W(選擇Advanced Installation):

下載地址選擇這個會快一些:


選擇以下組件安裝:

  • expat
  • fcgi
  • gdal
  • grass
  • gsl-devel
  • iconv
  • libspatialindex-devel
  • pyqt5
  • python3-devel
  • python3-qscintilla
  • python3-nose2
  • python3-future
  • python3-pyyaml
  • python3-mock
  • qca-qt5-devel
  • qca-qt5-libs
  • qscintilla-qt5
  • qt5-devel
  • qt5-libs-debug
  • qtwebkit-qt5-devel
  • qtwebkit-qt5-libs-debug
  • qwt-devel-qt5
  • sip-qt5
  • spatialite
  • qjson-dev
  • qjson-libs

這也可以選擇上述軟件包所依賴的軟件包。要注意的是,上述所有的軟件包或依賴不能有空格或中文。


4. 使用CMake設置並構建Visual Studio項目

要啓動具有VC ++和OSGeo4W變量的環境的命令提示符,將創建以下批處理文件(假定上述包安裝在默認位置):

set VS140COMNTOOLS = C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include
set LIB=%LIB%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib
set OSGEO4W_ROOT=C:\OSGeo4W64
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
call "%OSGEO4W_ROOT%\bin\py3_env.bat"
call "%OSGEO4W_ROOT%\bin\qt5_env.bat"
set O4W_ROOT=%OSGEO4W_ROOT:\=/%
set LIB_DIR=%O4W_ROOT%
path %path%;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
path %PATH%;C:\Program Files\CMake\bin;C:\cygwin64\bin
@set GRASS_PREFIX=C:/OSGeo4W64/apps/grass/grass-7.4.0
@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
@cmd

說明:上面的路徑要根據自己的實際情況,做適當地改變,特別是我紅色標註的地方,做好這一步後面會省去很多事情。(1)VS140COMNTOOLS表示VS15,call後續跟的X64表示64位編譯;(2)Include表示頭文件,這裏加了Win10系統的sdk;Lib表示編譯的動態庫;(3)Path表示環境變量;(4)特別注意:GRASS_PREFIX的路徑地址必須是“/”,Path路徑多個;之間不能有空格。

在某個地方創建一個“build”目錄。這將是生成所有構建輸出的位置。

找到CMake的安裝目錄,以管理員的方式運行"cmake-gui.exe",然後設置qgis源碼包的目錄和項目的構建目錄:


點擊“Configure ”啓動配置並選擇VisualStudio 14 2015/VisualStudio 14 2015 X64並保留本機編譯器,然後單擊完成。

Configure ”過程中,可能會出現配置不正常的項目,如果某個依賴項沒有鏈接到,請手動選擇鏈接目錄。我出現的找不到的問題:

1.記得錯誤後勾選ENABLE_QT5選項,否則將會查找qt4

2.PYRCC_PROGRAM需手動查找,我的對應路徑:C:/OSGeo4W64/apps/Python36/Scripts/pyrcc5.bat

3.SPATIALINDEX_LIBRARY需手動查找,我的對應路徑:C:/OSGeo4W64/lib/spatialindex-64.lib

4.取消勾選WITH_QWTPOLAR選項,不需要










配置到“Configuring done",然後點擊“Generate" 生成VS2015的項目解決方案,直到“Generating done”,然後在項目目錄中打開qgis-x.y.z.sln文件。
在使用ALL_BUILD目標構建QGIS之前,將Debug中的解決方案配置更改爲RelWithDebInfo(發佈調試信息)或Release(否則需要不包括的調試庫)。

5. 編譯QGIS

1、將debug模式改爲ReWithdebInfo

2、移除不依賴的項目,保留依賴項目,將qgis設置爲啓動項

3、優先編譯qgis_core,此工程編譯通過後,再編譯其他的;

4、全部編譯後,生成的所有文件在Build->output->bin->RelWithDebInfo目錄下


6. 編譯問題

1.找不到 <netinet/in.h>,註釋掉即可


2. error C2001: newline in constant (主要是頁面不支持("′")("″")的符號)

解決方法:打開出現warning的文件,Ctrl+A全選,然後在文件菜單:file->advanced save options ,在彈出的選項中選擇新的編碼方式爲:UNICODE codepage 1200 ,點擊確定,問題就解決了。

3.編譯過程中proj.lib相關報錯,將名稱換成proj_i.lib即可;

4.error LNK2019 unresolved external symbol WinMain referenced in function xx  qgis

解決方法:將qtmain.lib添加到附加依賴庫中,如圖所示:


5.此時會出現更種丟失dll的問題

解決方法:將兩個路徑加入到環境變量path中


6.此時打開exe文件仍然崩潰

解決方法:將OSGeo4W64\apps\Qt5\plugins文件下的platforms文件夾拷貝到剛纔的目錄即可,截圖如下:



4、再次啓動,成功。

打開項目中的測試數據,效果如下:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章