参考 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界面启动不起来。

qgis3.16.6+vs2017再编译(debug+release)的更多相关文章

  1. VS2017+QT5.12.10+QGIS3.16环境搭建及开发全流程

    题记:大力发展生产力,助力高效采集.(转载请注明出处https://www.cnblogs.com/1024bytes/p/15477374.html) 本篇随笔分为五个部分: 一.获取QGIS3.1 ...

  2. xcode编译 debug版或release 版

    编译debug版本或release 版本 在Run和Stop按钮的右边有一个工程名 点击工程名,选择Manage Schemes 选择Edit... 左侧选择Run ProjectName.app 右 ...

  3. cmake编译Debug和Release

    CMake 中有一个变量 CMAKE_BUILD_TYPE ,可以的取值是 Debug Release Rel WithDebInfo 和 MinSizeRel.当这个变量值为 Debug 的时候,C ...

  4. VS2019、Qt5.12及QGis3.16开发常见问题汇总

    在C++.Qt软件开发过程中,常常遇到一些编译错误或警告:本文将VS2019.Qt5.12.10和QGis3.16.10的二次开发过程常见的问题做了整理,供大家参考,也便于日后查阅.该内容分为四部分: ...

  5. QT 4.2.2的安装(安装完还要再编译,注意设置Windows Path)

    (安装篇)前奏: 提到C++的GUI Framework估计大多数人都会想到MFC.VCL,因为在十年前的COM时代,这两个大家伙几乎垄断了整个C++ windows平台上应用程序的开发市场, 但是最 ...

  6. Win7 VS2017 NASM编译FFMPEG(2018.12.22)

    今天无意中在gayhub发现个牛逼工程,全VS工程编译FFMPEG库,包括依赖库全是VS生成的,无需Mingw等Linux环境. 简单记录下过程,以防将来重装系统等情况,备忘. https://git ...

  7. Qt5.10.1 在windows下vs2017静态编译

    1.在计算机上安装python库和perl库(因为后续的静态编译需要用到这两种语言),可以在命令行敲击“python”和“perl -v”检查是否安装成功. 2.修改msvc-desktop.conf ...

  8. 编译并使用boost库(win7+boost1.63+vs2015+32位or 64位),超详细,boost于vs2017下编译(64/32bit)

    首先下载得到boost的最新版(目前最新版是1.63) 下载地址: http://www.boost.org   也可以从这里直接下载 http://download.csdn.net/detail/ ...

  9. iOS 设置不同环境下的配置 Debug Release 生产 测试 等等

    其实这个问题大家都知道,但是一般都是清楚一些皮毛的东西,只能进行一些简单的应用.在这里详细说一下模式切换的使用. Xcode给我们自带了两种编译模式Release 和 Debug,通常情况下我们可以利 ...

随机推荐

  1. 【第九篇】- Git 标签之Spring Cloud直播商城 b2b2c电子商务技术总结

    Git 标签 如果你达到一个重要的阶段,并希望永远记住那个特别的提交快照,你可以使用 git tag 给它打上标签. 比如说,我们想为我们的 xxx 项目发布一个"1.0"版本. ...

  2. go build 与go install

    相同点都能生成可执行文件 不同点go build 不能生成包文件, go install 可以生成包文件go build 生成可执行文件在当前目录下, go install 生成可执行文件在bin目录 ...

  3. 【多线程】Android多线程学习笔记——线程池

    Java线程池采用了享元设计模式,在系统中维持一定数量的线程,用于处理异步或并发需求,在平时处理异步或并发任务时被广泛使用.这里基于JDK1.8和Android28来整理一些关于线程池的知识点. 一. ...

  4. 使用ImageMagick操作gif图

    上篇文章我们已经学习了 GraphicsMagick 中的许多函数,也说过 GraphicsMagick 是 ImageMagick 的一个分支,所以他们很多的函数都是一样的使用方式和效果,相似的内容 ...

  5. 【PHP数据结构】插入类排序:简单插入、希尔排序

    总算进入我们的排序相关算法的学习了.相信不管是系统学习过的还是没有系统学习过算法的朋友都会听说过许多非常出名的排序算法,当然,我们今天入门的内容并不是直接先从最常见的那个算法说起,而是按照一定的规则一 ...

  6. centos7.6,nginx1.18,php-7.4.6,mysql-5.7.30 安装

    #1.下载,来自各官网 nginx-1.18.0.tar.gz php-7.4.6.tar.gz mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz #下载到本地再传 ...

  7. DevOps与CICD简介

    整体知识点 ·Devops与CI/CD简介 ·Gitlab安装与Git命令使用 ·Gitlab实现持续集成 ·Gitlab实现分支管理 ·Jenkins简介及安装 ·Jenkins插件管理及基础配置 ...

  8. SVN与LDAP服务器整合验证

    说明:svn的访问是以svn://协议访问的,一般都是用http协议访问,所以要使用apache的httpd服务器apache已经添加了对ldap服务器的支持,所以svn的认证过程是使用apache代 ...

  9. 鸿蒙内核源码分析(原子操作篇) | 是谁在为原子操作保驾护航 | 百篇博客分析OpenHarmony源码 | v34.02

    百篇博客系列篇.本篇为: v34.xx 鸿蒙内核源码分析(原子操作篇) | 谁在为原子操作保驾护航 | 51.c.h .o 本篇说清楚原子操作 读本篇之前建议先读鸿蒙内核源码分析(总目录)系列篇. 基 ...

  10. PolarDB PostgreSQL 快速入门

    什么是PolarDB PostgreSQL PolarDB PostgreSQL(下文简称为PolarDB)是一款阿里云自主研发的云原生数据库产品,100%兼容PostgreSQL,采用基于Share ...