QGIS(2.18.15 源碼)+Qt(5/5.9.3)+VS2015(X64)編譯


由於工作要求,今年需要基於Qt搞跨平台的GIS。前期未曾接觸過Qt,最近也簡單學習了下,開源的QGIS是非常不錯的學習資源,下了最新版的QGIS源碼,不過在VS2015下卻沒法直接打開。網上查了很多資料,借鑒了很多前輩的經驗(大部分文檔QGIS源碼的版本都比較老)。雖然過程很艱辛,不過最后總算編譯成功且能運行了,心里倍激動。廢話不多說,趕緊上干貨,具體如下:

一、資源准備

  1、QGIS 2.18.15源碼:

  地址:qgis-latest.tar.bz2(2018.01.19已更新到2.18.16,由於我18號下的,所以文中的針對的是2.18.15版本源碼的,后續的編譯應該差不多);

  2、Qt 5.9.3:

  地址:qt-enterprise-windows-x86-5.9.3(如果鏈接下載不了,請去官方地址下載,只用下載msvc2015_64即可,我用的是VS2015編譯64位的);

  3、VS2015:

  這個就自己去下載安裝了,比較簡單(記得勾選VC++);另外,可以通過VS自帶的工具和擴展,下載Qt插件,QtPackage,然后把Qt5.9.3下的msvc2015_64設置過去就行;

  4、CMake:

  地址:cmake-3.10.2-win64-x64

  5、cygwin(主要用於下載flex及bison)

  地址:Cygwin-setup-x86_64

    

  

  

  

  

  

  說明:(1)View選擇Category;(2)Search輸入要下載的內容,本工具只用下載flex和bison;(3)選擇Devel,展開,如果當前未下載則顯示的是"Skip",點擊會變成具體的版本,然后點擊下一步即可下載(由於我這邊都下過了,所以顯示的是keep)。按照這里的說明,分別下載flex和bison即可;(4)上述路徑不要有中文或空格。

  6、osgeo4w(主要用於下載gdal等)

  地址:osgeo4w-setup-x86_64

  

  

  

  

  

  

  

  說明:(1)這里的操作和Cygwin基本一致;(2)Search輸入要下載的內容,具體包括: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;(3)上述路徑不要有中文或空格

二、編譯過程

  1、制作bat設置環境變量:

  先貼我這邊的bat文件,保存成path.bat(隨便命名就行)  

@echo off
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" x64

set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include
set LIB=%LIB%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib

set OSGEO4W_ROOT=C:\QGIS\OSGeo4W64
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
path %PATH%;D:\Program Files\CMake\bin;C:\QGIS\cygwin64\bin;C:\QGIS\OSGeo4W64\apps\Python36

@set GRASS_PREFIX=C:/QGIS/OSGeo4W64/apps/grass/grass-7.2.2
@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
@set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib

@cmd

  說明:(1)VS140COMNTOOLS表示VS15,call后續跟的X64表示64位編譯;(2)Include表示頭文件,這里加了Win10系統的sdk;Lib表示編譯的動態庫;(3)Path表示環境變量;4)特別注意:GRASS_PREFIX的路徑地址必須是“/”,Path路徑多個;之間不能有空格。

  2、啟動Cmake進行配置:

  

  

  點擊:Configure,如果遇到錯誤,則解決(手動配置路徑即可),以下是我這邊配置的最終圖:

  

  

  

  

  最終配置完成后,沒有錯誤,圖如下:

   

  3、CMake生成解決方案:

  

  4、啟動VS編譯解決方案:

  

  打開解決方案后,默認有好幾百個工程,編譯太廢勁,我這邊只保留了以下幾個,不用的都刪了(后續若需要,則再加),選擇RelWithDebInfo方式編譯:

  

  說明:

  (1)優先編譯qgis_core,此工程編譯通過后,再編譯其他的;

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

  

  (3)找不到 <netinet/in.h>,注釋掉即可;

  (4)編譯qgis工程qtmain.lib報錯的解決,更換地址采用5.9.3的

  

  全部編譯后,位於output目錄下,最終編譯后截圖如下:

  

 

  5、啟動自己編譯的Qt軟件:

  將OSGeo4W64\apps\Qt5\bin下的dll全部拷貝到同目錄下,啟動qgis.exe,會報錯如下:

  

  此時,只需將OSGeo4W64\apps\Qt5\plugins文件下的platforms文件夾拷貝到剛才的目錄即可,截圖如下:

  

  最終啟動qgis.exe,效果圖如下(部分圖標沒有,功能不全,后續可逐漸加入其他工程編譯)

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM