qgis3.16.6+vs2017再編譯(debug+release)


參考 https://www.cnblogs.com/superbi/p/11188145.html 文章以及其它文章,對qggis3.16.6進行了重新編譯

一、編譯准備

1、Cygwin

1.1安裝地址:

下載地址:http://www.cygwin.com/setup-x86_64.exe   64位

                  http://www.cygwin.com/setup-x86.exe      32位

下載界面如下:

下一步下一步往下安裝,其中網絡設置為

1.2下載GNU flex, GNU bison

 

 

注意事項

(1)View選擇Category(若不是,點擊View可更改)

(2)Search輸入要下載的內容,本工具只用下載flex和bison

(3)選擇Devel,展開,如果當前未下載則顯示的是"Skip",點擊會變成具體的版本,然后點擊下一步即可下載(由於我這邊都下過了,所以顯示的是版本號和keep)。


(4)Search一個庫之后,點擊"Skip"使其出現版本編號后,清除search框的內容,繼續search下一個。全部搜索點擊完成后,再點擊下一步,所有搜索項將會一起下載。
(5)上述路徑不要有中文或空格

下載完成后顯示keep標識

 

2、安裝osgeo4W

2.1下載

http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe  64位

 http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86.exe     32位

 

2.2 安裝三方庫

以前安裝先關第三方庫非常麻煩,現在osgeo4W提供了方便的安裝方法

1、search選擇安裝qgis-dev-deps(qgis-ltr-deps)

2、操作同Cygwin的步驟類似,略去不提

3、只下載libs中的內容

2.3、cmake

下載地址:

https://github.com/Kitware/CMake/releases/download/v3.13.1/cmake-3.13.1-win64-x64.zip   64位免安裝

https://github.com/Kitware/CMake/releases/download/v3.13.1/cmake-3.13.1-win32-x86.zip  32位免安裝

二、生成QGIS工程

1、在D:\OSGeo4W64安裝路徑下新建一個.bat文件,內容如下:

  @echo off

  REM VCSDK

  set VCSDK=10.0.17763.0

  REM qgis解壓路徑

  call D:\QGIS\qgis-3.16.6\ms-windows\osgeo4w\msvc-env.bat x86_64

  REM OSGeo4W64的安裝路徑

  set OSGEO4W_ROOT=D:\QGIS\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%

  REM VS路徑

  call "C:\Program Files (x86)\Microsoft Visual Studio\ 2017\ Community\ VC\ Auxiliary\ Build\ vcvarsall.bat" amd64

  path %path%;C:\Program Files (x86)\Microsoft Visual Studio\ 2017\ Community\ VC\ Tools\ MSVC\ 14.16.27023\bin

  REM Cmake路徑 cygwin64路徑

  path %PATH%;C:\Program Files\CMake\bin;D:\QGIS\cygwin64\bin

  @set GRASS_PREFIX=D:\OSGeo4W64\apps\grass\grass-78

  @set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include

  @set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib

  REM OSGeo4W64的安裝路徑

  set LIB=%LIB%;%OSGEO4W_ROOT%\apps\Qt5\lib;%OSGEO4W_ROOT%\lib

  set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\apps\Qt5\include;%OSGEO4W_ROOT%\include

  REM call "C:\Program Files (x86)\Microsoft Visual Studio\ 2017\ Community\ Common7\ IDE\ devenv.exe"

 @cmd

這里面的路徑根據自己的環境選擇。

2、運行創建的.bat文件,輸入命令cmake-gui, 打開cmake

 

3、配置CMAKE

選擇目錄

 

點configue進行配置,選擇自己安裝的VS版本,配置完成后檢查這些庫的路徑是否正確,不正確的手動調整。

可以選擇取消python綁定,以及測試工程

 

 

4、點擊generate生成工程

三、編譯以及運行QGIS工程

1、編譯QGIS

qgis_core,qgis_gui,qgis_app,qgis_native,qgis_destop,ui,qgis,qgis_analysis,libdxfrw,postgresprovider僅僅保留這幾個庫就行了,其它的庫有需要再加載進來編譯就行。

2、運行QGIS

release編譯完成,運行QGIS沒有問題,運行成功。

3、DEBUG模式

debug模式編譯完成qgis后運行發現有錯誤中斷到QCA庫的內部,經查找原因應該是需要編譯debug版本時,要把依賴的qca,qwt,qtkeychain,QScintilla這幾個庫單獨編譯為debug版本。官網提供的庫只有release沒有debug版本,那怎樣編譯debug版本的程序呢,其實大家都知道debug編譯可以使用release版本的庫,只是如果是帶UI的庫,必須使用debug版本,否則就算編譯通過了運行qgis會崩潰。

我自己編譯DEBUG版本的方式是,下載與osgeo4W中相同版本的qca,qwt,qtkeychain,QScintilla的庫,單獨編譯,然后再把debug版本的lib和dll拷貝到相關目錄之下,在VS2017的相關項目的依賴庫中將這幾個更改為debug版本即可(應該也可以通過cmake進行配置,本人沒做過研究)。

注:Qt自己的Qt5WebKitWidgets這個庫也需要修改為debug。

四、其它

1、關於qca

1.1 介紹

QCA是C++ GUI Qt中的一個第三方插件,為Qt提供了一個針對安全性方面編程的框架。從QCA的名稱不難發現,它的設計在很多方面借鑒了JCE(Java Cryptography Extension)——QCA定義了一組公共接口,並由不同的提供者提供加解密算法實現。開發者通過調用簡單的API,就可以輕松的實現對稱加解密、非對稱加解密以及數字證書等功能。QCA是跨平台的,可以運行在Windows、Unix和MacOSX等不同的平台上。

1.2 編譯

(1)解壓源碼

(2)啟動qt命令行模式(開始菜單有)

(3)執行cmake-gui

(4)在cmake進行Configure

(5)勾選DEVELOPER_MODE、去除BUILD_TESTS的勾選,在CMAKE_CXX_FLAGS加入 /MP;並添加CMAKE_DEBUG_POSTFIX編譯選項(點擊CMake界面Add Entry,Name: CMAKE_DEBUG_POSTFIX Type: STRING Value: d)

(6)Generate、Open Project

(7)打開工程后執行批生成ALL_BUILD (8)在自定義的安裝目錄中新建qca_2.2.1目錄,然后在編譯目錄中拷貝bin目錄,lib目錄到qca_2.2.1目錄,在源碼目錄拷貝include到qca_2.2.1目錄,用編譯目錄下的qca_version.h替換include目錄中的qca_version.in.h

1.3 注意事項

編譯的時候總是出現could not find pkgconfig,查找原因是因為沒有安裝pkg-config,下載地址如下:

https://sourceforge.net/projects/pkgconfiglite/files/0.28-1/pkg-config-lite-0.28-1_bin-win32.zip/download

在CMakeLists.txt中增加

set(PKG_CONFIG_EXECUTABLE "D:/QGIS/pkg-config-lite-0.28-1/bin/pkg-config.exe")

即可通過編譯

2、編譯qwt

1.1編譯

使用qmake進行編譯

1打開vs2017命令行

1.2、qt的環境設置

set PATH=%PATH%;D:/QGIS/OSGeo4W64/apps/Qt5/bin;

set QMAKESPEC=win32-msvc

1.3、qmake qwt.pro

1.4、nmake

1.5、nmake install

3、編譯QScintilla

QScintilla 是 Scintilla 這個 C++ 編輯器類在 QT 環境下的移植版本。

下載源代碼

3.1、打開vs2017命令行

3.2、qt的環境設置

set PATH=%PATH%;D:/QGIS/OSGeo4W64/apps/Qt5/bin;

set QMAKESPEC=win32-msvc

3.3、qmake qscintilla.pro

3.4、nmake all

3.5、nmake install

4、編譯qtkeychain

QtKeychain是一個Qt API,用於安全地存儲密碼和其他秘密數據。數據的存儲方式取決於平台。Mac OS X 密碼存儲在 OS X Keychain中。在 Linux/Unix 上,如果運行,使用 GNOME Keyring,否則QtKeychain 嘗試使用 KWallet(通過 D-Bus),如果可用的話。由於 Windows 不提供安全存儲服務,QtKeychain通過 Windows API 函數CryptProtectData,使用用戶的登錄憑據加密密碼。然后通過 QSettings 持續加密數據。在不受支持的環境中,QtKeychain報告錯誤。除非明確要求,否則它不會存儲任何未加密的數據(設置不安全回調(真))。‎

(1)解壓源碼

(2)vs2017命令行

           set PATH=%PATH%;D:/QGIS/OSGeo4W64/apps/Qt5/bin; C:/ Program Files/ CMake/ bin

           set QMAKESPEC=win32-msvc

(3)執行cmake-gui
(4)在cmake進行Configure、修改CMAKE_INSTALL_PREFIX為自定義的安裝目錄,並添加CMAKE_DEBUG_POSTFIX編譯選項(點擊CMake界面Add Entry,Name: CMAKE_DEBUG_POSTFIX Type: STRING Value: d)
(5)然后Generate、Open Project
(6)打開工程后執行批生成ALL_BUILD,INSTALL

5、debug編譯錯誤

5.1編譯qgis_core工程時,依賴工程qgis_core_autogen編譯時報以下錯誤。

Fatal Python error : initfsencoding: unable to load the file system codec

ModuleNotFoundError: No module named 'encodings'

解決辦法增加 系統變量

變量名 PYTHONHOME,變量值 C:\OSGeo4W\apps\Python37

但是好像我已經取消了python綁定,debug編譯的時候還需要python環境?

5.2 不能加載qgsi_app.dll

 

Could not load qgis_app.dll錯誤

解決過程:查看qgsi_app的依賴發現缺少Qt5的相關庫,把相關庫拷貝的編譯的目錄之下問題解決。

5.3 系統圖標不顯示

編譯完成后qgis啟動后,系統的圖標不顯示。

運行的時候程序找不到正確支持圖標格式的庫文件,需要將 ”plugins/imageformats”文件拷貝的運行exe目錄之下。

platforms這個目錄也需要拷貝過來,不要qt界面啟動不起來。

 


免責聲明!

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



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