QGIS3.28的二次开发一:编译工程

news/2024/5/19 0:56:47

环境:VS2019+OSGeo4W+CMake_3.26+Cygwin64+QGIS_3.28

注意:一定要按照步骤顺序来!

一、配置环境

(一)VS2019

VS2019下载链接https://my.visualstudio.com/Downloads?q=visual%20studio%202019&wt.mc_id=o~msft~vscom~older-downloads下载完成之后安装即可,这里选择的是免费社区版。安装的时候选择的组件为“使用C++的桌面开发”和“通用Windows平台开发”。

(二)OSGeo4W

OSGeo4W下载地址https://download.osgeo.org/osgeo4w/v2/osgeo4w-setup.exe下载完毕后进行安装,选择Advanced Install,注意中间选择网络的时候选择直接连接即可。

 进去后搜索:qgis-ltr-deps,然后选择ltr分支的3.28版本,直接下一步安装即可。

 安装时会默认帮我们把依赖包也一同安装,安装完毕如图所示。

(三)Cygwin64

Cygwin64下载地址https://www.cygwin.com/setup-x86_64.exe

 下载完毕进行安装,同样选择直接连接的方式。

 安装bison和flex

 

安装完毕即可。 

(四)QGIS_3.28

下载QGIS_3.28的源码包

QGIS_3.28源码下载地址https://qgis.org/downloads/qgis-latest-ltr.tar.bz2

 下载完毕后,解压到自定义目录,我这里解压到了OSGeo4W的根目录。

(五)CMake_3.26

CMake下载地址:Download | CMakehttps://cmake.org/download/

 下载完安装即可。

二、CMake搭建工程

(一)配置环境变量

首先配置一下环境变量,这里有两种方式。

1、第一种方式

新建一个bat文件,然后里面填入如下内容。

@echo off
set VS190COMNTOOLS=C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat" x64set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Windows Kits\10\Include
set LIB=%LIB%;C:\Program Files (x86)\Windows Kits\10\Libset OSGEO4W_ROOT=D:\OSGeo4W
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python39
SET PYTHONPATH=%PYTHONHOME%;%PYTHONHOME%\Scripts
set PYTHON_EXECUTABLE=%PYTHONHOME%/python3.exe
PATH %PYTHONPATH%;%PATH%path %OSGEO4W_ROOT%\apps\qt5\bin;%PATH%set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\Qt5\plugins
set O4W_QT_PREFIX=%OSGEO4W_ROOT:\=/%/apps/Qt5
set O4W_QT_BINARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/bin
set O4W_QT_PLUGINS=%OSGEO4W_ROOT:\=/%/apps/Qt5/plugins
set O4W_QT_LIBRARIES=%OSGEO4W_ROOT:\=/%/apps/Qt5/lib
set O4W_QT_TRANSLATIONS=%OSGEO4W_ROOT:\=/%/apps/Qt5/translations
set O4W_QT_HEADERS=%OSGEO4W_ROOT:\=/%/apps/Qt5/includeset O4W_ROOT=%OSGEO4W_ROOT:\=/%
set LIB_DIR=%O4W_ROOT%
path %path%;C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.16.27023\bin
path %PATH%;D:\OSGeo4W\apps\Qt5\bin;C:\cygwin64\bin
@set GRASS_PREFIX=D:\OSGeo4W\apps\grass\grass83
@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%\includecall "C:\Program Files\CMake\bin\cmake-gui.exe"

记得把里面的路径改成自己的,最后一行代码的意思的打开cmake软件。

修改完毕后保存,然后使用管理员命令打开 Windows PowerShell,运行这个bat文件。

 然后运行完毕会弹出来Cmake的窗口。

2、第二种方式

打开VS2019自带的x64 Native Tools Command Prompt for VS 2019

然后把上面bat文件的命令全部复制粘贴过来就可以了,我更推荐使用这一种方法(后面有提到原因)。

(二)第一次Configure

 弹出来CMake的界面后,先选择QGIS_3.28源代码的存放路径,再选择项目编译输出的目标路径,然后点击Configure。

(三)修复错误 

如果报错,需要修复这些错误。我的错误有四个,分别是

Could not find GRASS 7

Could not find GRASS 8

ImportError: DLL load failed while importing Qsci:找不到对应模块

Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)

1、设置GRASS的路径

对于第一个和第二个问题,解决方式也很简单,进入到OSGeo4W的安装目录,进入\apps\grass文件夹,看到我们安装的grass版本是grass83

然后在 CMake的GRASS_PREFIX8的选项填入我们的路径 D:\OSGeo4W\apps\grass\grass83,如果你的版本是grass7*,那就填到GRASS_PREFIX7的位置。7和8选填一个即可。

2、安装Python库qscintilla

第三个问题是

ImportError: DLL load failed while importing Qsci:找不到对应模块

 对于这个问题的解决方法,需要安装一个第三方库

pip install qscintilla -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

 但是呢,由于通过第一种方式设置的环境变量并不能对外部生效,所以我们的pip是执行不了的。第二种方式就可以顺利执行pip命令。

直接在x64 Native Tools Command Prompt for VS 2019中输入上面安装库的代码即可。

 安装完毕的结果如下,输入命令pip list可以看到qscintilla包安装成功。

对于第四个问题,由于QGIS项目在Windows下没有用到PkgConfig,因此可以忽略。这里提供下解决方法。

Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE)

出现这个问题的原因是我们的Windows系统没有安装pkg-config,需要进行安装,再设置一下环境变量。

3、安装pkg-config

pkg-config安装过程如下

(1)用管理员权限打开Windows PowerShell命令行界面;

(2)输入命令,然后选择A;

Set-ExecutionPolicy AllSigned

(3) 输入命令,choco安装完成;

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

(4) 输入命令安装pkg-config,安装完毕会显示安装的路径;

choco install pkgconfiglite

(5)设置pkgconfig的环境变量,在安装路径找到pkg-config.exe的路径,我的路径是C:\ProgramData\chocolatey\lib\pkgconfiglite\tools\pkg-config-lite-0.28-1\bin

 然后设置环境变量,在系统变量里面增加一条环境变量

名称为PKG_CONFIG_PATH,值为pkg-config.exe的路径

设置完毕重启电脑,重启完电脑需要重新执行第2.1步的配置环境变量。

 如果你没有修改环境变量,就无需重启电脑。 如果没有关闭x64 Native Tools Command Prompt for VS 2019,但是Cmake已经关闭,那么就再次输入下面的命令来打开CMake软件。

call "C:\Program Files\CMake\bin\cmake-gui.exe"

(四)修复完错误点击Configure

在CMake窗口中再次点击Configure即可,出现Configuring done。注意:出现Configuring done不一定代表没问题,一定要检查输出日志!

(五)点击Generate,并打开项目

出现Generating done即可。然后点击Open Project,会自动打开VS2019,然后加载QGIS项目。

三、在VS2019中打开工程

(一)将环境切换为Release

项目加载完成后,将环境切换到Release,因为就算是Debug环境,编译出来的程序也无法运行。

(二) 编译

在解决方案ALL_BUILD上点击鼠标右键,点击生成,这一步耗费的时间有点长,需要耐心等待。

编译有一个失败的,提示如下,导致运行程序的时候Python环境不能正确加载,目前还没找到原因。不使用Python的话可以忽略。

 (三)设置启动项目

设置qgis为启动项目

 (四)设置调试环境

在解决方案qgis上点击鼠标右键----属性----调试----环境中输入QT5的bin路径和plugins路径

 (五)运行程序

点击“本地Windows调试器运行程序”,运行程序。

如果启动qgis.exe时报qgis_app.dll无法加载或找不到的问题,而该dll又在该目录下,原因是调用qgis_app.dll时所依赖的其他dll未加载。

解决方法 :将D:\OSGeo4W\bin下的dll文件,以及D:\OSGeo4W\apps\Qt5\bin下的dll文件全部拷贝到qgis.exe所在目录即可,这个目录在CMake设置的build目录下的output\bin\Release目录下,我这里是D:\OSGeo4W\qgis_build\output\bin\Release。

 再次点击“本地Windows调试器运行程序”,运行程序。

出现了一个error,是python环境的问题(编译时出现了一个失败,推测与其有关),如果不需要使用python编程,可以忽略,目前还没找到解决方法。如果有哪位开发人员解决了这个问题,请告知,非常感谢!

 点击Close可以进入主程序。

 到此配置完毕。

参考教程如下:

QGIS源码编译:QGIS3.22.4+vs2019_qgis源码下载_guoqiong07的博客-CSDN博客

【程序员编程日记】QGIS+VS2019+QT5.14编译_哔哩哔哩_bilibili 


http://www.mrgr.cn/p/32721300

相关文章

WAIC2023:图像内容安全黑科技助力可信AI发展

目录 0 写在前面1 AI图像篡改检测2 生成式图像鉴别2.1 主干特征提取通道2.2 注意力模块2.3 纹理增强模块 3 OCR对抗攻击4 助力可信AI向善发展总结 0 写在前面 2023世界人工智能大会(WAIC)已圆满结束,恰逢全球大模型和生成式人工智能蓬勃兴起之时,今年参…

【沐风老师】归纳总结50个3dMax常用的方法和技巧

​在日常工作中,我们总能总结出一些方法和技巧,用以在今后的工作中提高工作效率。下面是50个3dMax最常见的方法和技巧,这些方法和技巧已经成为众多3dMax用户日常工作流程中不可或缺的一部分。 1.使用“重命名对象”工具可以同时重命名多个对象…

【Chat GPT】用 ChatGPT 运行 Python

前言 ChatGPT 是一个基于 GPT-2 模型的人工智能聊天机器人,它可以进行智能对话,同时还支持 Python 编程语言的运行,可以通过 API 接口进行调用。本文将介绍如何使用 ChatGPT 运行 Python 代码,并提供一个实际代码案例。 ChatGPT …

golang pprof

pprof是一个用于分析数据的可视化和分析工具,由谷歌公司的开发团队使用go语言编写成的。一般用于对golang资源占用进行分析。不是原创,参考:https://juejin.cn/post/7122473470424219656 1. 通过页面查看golang运行情况 访问 http://127.0.0…

PostgreSql 锁

一、概述 在 PostgreSQL 事务中提到,多个用户访问相同数据时可能出现脏读,不可重复度,幻读,更新丢失的问题,为解决这些问题,定义了不同的隔离级别,而隔离级别的具体实现,依靠的就是数…

Kubernetes 使用 helm 部署 NFS Provisioner

文章目录 1. 介绍2. 预备条件3. 部署 nfs4. 部署 NFS subdir external provisioner4.1 集群配置 containerd 代理4.2 配置代理堡垒机通过 kubeconfig 部署 部署 MinIO添加仓库修改可配置项 访问nodepotingress 1. 介绍 NFS subdir external provisioner 使用现有且已配置的NFS…

在外远程NAS群晖Drive - 群晖Drive挂载电脑磁盘同步备份【无需公网IP】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

tinkerCAD案例:24. Ruler - Measuring Lengths 标尺 -量勺

tinkerCAD案例:24. Ruler - Measuring Lengths 标尺 - 测量长度 Project Overview: 项目概况: A machine shop, where any idea can become a reality, can cost millions and million of dollars. Still, the most important tool in the shop is the…

“华为杯”研究生数学建模竞赛2019年-【华为杯】D题:汽车行驶工况构建

目录 摘 要: 1.问题背景与问题重述 1.1 问题背景 1.2 问题重述 2.模型假设 3.符号说明 4.问题一的求解 4.1 问题分析 4.2 异常数据的处理 4.2.1 明显错误数据的处理 4.2.2 加减速异常数据的处理 4.3 缺失数据的处理 4.3.1 数据插补处理 4.3.2 视为长期停车处理 4.3.…

Linux 学习记录60(ARM篇)

Linux 学习记录60(ARM篇) 本文目录 Linux 学习记录60(ARM篇)一、SPI总线1. 概念2. 硬件连接 二、SPI总线协议三、SPI总线通信模式四、对比IIC总线和SPI总线1. 相同点2. 不同点 思维导图 一、SPI总线 1. 概念 1、SPI总结是Motorola首先提出的全双工三线/四线同步串行总线 2、采…

车道线检测|利用边缘检测的原理对车道线图片进行识别

前言 那么这里博主先安利一些干货满满的专栏了! 这两个都是博主在学习Linux操作系统过程中的记录,希望对大家的学习有帮助! 操作系统Operating Syshttps://blog.csdn.net/yu_cblog/category_12165502.html?spm1001.2014.3001.5482Linux S…

15.Netty源码之EventLoop

highlight: arduino-light Netty配置主从Reactor模式 通过将NioServerSocketChannel绑定到了bossGroup。 将NioServerSocketChannel接收到请求创建的SocketChannel放入workerGroup。 将2个不同的SocketChannel绑定到2个不同的Group完成了主从 Reactor 模式。 分配NIOEventLoop的…

Git的安装以及本地仓库的创建和配置

文章目录 1.Git简介2.安装Git2.1在Centos上安装git2.2 在ubuntu上安装git 3.创建本地仓库4.配置本地仓库 1.Git简介 Git是一个分布式版本控制系统,用于跟踪和管理文件的更改。它可以记录和存储代码的所有历史版本,并可以方便地进行分支管理、合并代码和协…