• 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:QGISqgis-3.16.6ms-windowsosgeo4wmsvc-env.bat x86_64

      REM OSGeo4W64的安装路径

      set OSGEO4W_ROOT=D:QGISOSGeo4W64

      call "%OSGEO4W_ROOT%ino4w_env.bat"

      call "%OSGEO4W_ROOT%inpy3_env.bat"

      call "%OSGEO4W_ROOT%inqt5_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.27023in

      REM Cmake路径 cygwin64路径

      path %PATH%;C:Program FilesCMakein;D:QGIScygwin64in

      @set GRASS_PREFIX=D:OSGeo4W64appsgrassgrass-78

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

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

      REM OSGeo4W64的安装路径

      set LIB=%LIB%;%OSGEO4W_ROOT%appsQt5lib;%OSGEO4W_ROOT%lib

      set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%appsQt5include;%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:OSGeo4WappsPython37

    但是好像我已经取消了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界面启动不起来。

  • 相关阅读:
    集合改变时会自动通知的集合类
    WPF中的MatrixTransform
    WPF中,如何将Vista Aero效果扩展到整个窗口
    WPF中的命令与命令绑定(二)
    参加BEA Dev2Dev TechDays 归来
    在WPF中自定义你的绘制(五)
    Microsoft Surface
    WPF与缓动(二) 正弦与余弦缓动
    WPF与缓动(一) N次缓动
    终于找到了一个WPF中的日历控件
  • 原文地址:https://www.cnblogs.com/m-zhang-yang/p/14694147.html
Copyright © 2020-2023  润新知