当前位置: 首页 > news >正文

Ubuntu系统编译调试QGIS源码保姆级教程

在之前的文章中,我详细介绍了怎么在Windows下编译QGIS源码,也得到了不错的反馈。但是不足的是Windows下只能编译QGIS的Release模式和RelWithDebInfo模式,想要分析源码,“断点调试”肯定是少不了的,但是这两种模式虽然也能做到调试程序,但是总有种种不足,例如,因为代码是优化过的,某些调试操作可能会有所不同或略显困难。另外由于某些变量可能被优化掉,它们在调试过程中可能不可见等等。所以,为了调试程序更方便,决定在Unbuntu下编译一个可以调试的QGIS。

由于上一篇在Windows下编译的是QGIS3.18.3版本,因此本次在Ubuntu上也选择编译该版本。经测试,在Ubuntu 20.04上面编译比较顺利。

主要环境是:

  • Ubuntu 20.04
  • QT 5.12.8
  • Qgis 3.18.3
  • CMake 3.16.3
  • Flex 2.6.4
  • Bison 3.5.1
  • Python 3.8.5

除了Ubuntu和QGIS,其他的都不需要刻意单独下载,按照教程来即可。

安装虚拟机

在Ubuntu 20.04镜像下载地址:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/20.04/
使用此镜像新建一个虚拟机,分配的磁盘不要太小,之前分配了20G的磁盘空间,结果根本不够用,于是我后面分配了60G的空间。
安装完毕如下:
在这里插入图片描述

配置开发环境

建议将不同版本的QGIS源代码用单独的目录存放,打开命令行终端,输入如下命令,建立工作目录并切换到该目录。

mkdir -p ${HOME}/dev/QGIS_318
cd ${HOME}/dev/QGIS_318

下载源码:

wget https://github.com/qgis/QGIS/archive/final-3_18_3.tar.gz

如果下载速度慢的话,可以关注在下面评论发你一份
下载完毕后解压:

tar -zxf QGIS-final-3_18_3.tar.gz

由于Ubuntu 20.04 默认没有安装g++编译器,因此需要安装一下,执行下面的两条命令

sudo apt-get update
sudo apt-get install build-essential

安装依赖库:

sudo apt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex flip gdal-bin git graphviz grass-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpdal-dev libpq-dev libproj-dev libprotobuf-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqscintilla2-qt5-dev libqt5opengl5-dev libqt5serialport5-dev libqt5sql5-sqlite libqt5svg5-dev libqt5webkit5-dev libqt5xmlpatterns5-dev libqwt-qt5-dev libspatialindex-dev libspatialite-dev libsqlite3-dev libsqlite3-mod-spatialite libyaml-tiny-perl libzip-dev libzstd-dev lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pdal pkg-config poppler-utils protobuf-compiler pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev python3-autopep8 python3-dateutil python3-dev python3-future python3-gdal python3-httplib2 python3-jinja2 python3-lxml python3-markupsafe python3-mock python3-nose2 python3-owslib python3-plotly python3-psycopg2 python3-pygments python3-pyproj python3-pyqt5 python3-pyqt5.qsci python3-pyqt5.qtsql python3-pyqt5.qtsvg python3-pyqt5.qtwebkit python3-requests python3-sip python3-sip-dev python3-six python3-termcolor python3-tz python3-yaml qt3d-assimpsceneimport-plugin qt3d-defaultgeometryloader-plugin qt3d-gltfsceneio-plugin qt3d-scene2d-plugin qt3d5-dev qt5-default qt5keychain-dev qtbase5-dev qtbase5-private-dev qtpositioning5-dev qttools5-dev qttools5-dev-tools saga spawn-fcgi xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb

设置ccache(可选,推荐设置,能加快编译速度):

cd /usr/local/bin
sudo ln -s /usr/bin/ccache gcc
sudo ln -s /usr/bin/ccache g++

编译源码

上面的操作进行完毕之后,有两种编译方式,我将分别进行讲解。

Qt Creator编译(慢)

由于我们已经安装了QT,但是并没有安装Qt Creator,因此先进行安装:

sudo apt-get install qtcreator

安装完毕后,打开Qt Creator:

qtcreator

在这里插入图片描述
然后打开项目,选择源码目录下的CMakeLists.txt文件
在这里插入图片描述
然后在项目配置页面,点开详情,选择模式,由于我们的目的是调试程序,所以我们只选择Debug模式即可。
在这里插入图片描述
点击左侧的“桌面”,在右侧可以配置我们的CMake选项:
在这里插入图片描述
然后点击“Configure Project”,生成项目。

默认配置中,QGIS的三维模块和QGIS3.18新增支持的内存数据库SAP HANA模块并没有启用,所以编译完成后得到的QGIS不包含三维地图浏览和SAP HANA数据库存储功能,如果需要使用这两个模块,需将WITH_3D和WITH_HANA设置为“ON”。

然后构建项目即可。
在这里插入图片描述
构建的过程要耗费很长时间,可以去看个小视频放松一下~
编译完成后,就可以进行断点调试了。
在这里插入图片描述

命令行编译(快)

为了防止和上面的编译方式产生冲突,我们新建个QGIS_318_Command文件夹:

mkdir -p ${HOME}/dev/QGIS_318_Command
cd ${HOME}/dev/QGIS_318_Command

然后进入源码压缩包存放的目录,把源码解压到新建的文件夹中:

tar -zxvf QGIS-final-3_18_3.tar.gz -C ${HOME}/dev/QGIS_318_Command

我们进入到源码目录,新建一个build文件夹,这里是用来存放编译后产生的文件的:

cd ${HOME}/dev/QGIS_318_Command/QGIS-final-3_18_3
mkdir build
cd build

执行CMake:

ccmake ..

在这里插入图片描述
按c继续
在这里插入图片描述
按e继续
把BUILD的类型改为Debug,其他的选项可以自己根据需要修改。
在这里插入图片描述
每次修改完都要再次输入c,进行Configure,如果出现g的按键标志,就可以按g进行Generate。
在这里插入图片描述
Generate完成后将自动退出ccmake界面,回到命令行终端。输入“make”命令或者“make -jx”命令,x代表使用的处理器个数,可以加速编译(注意不要超过虚拟机设置的处理器个数和内核个数的乘积),回车,开始编译可执行文件:
在这里插入图片描述
又将是漫长的等待,刷会小视频放松一下吧~
成功之后,就可以输入下面的命令进行运行啦!

./output/bin/qgis

在这里插入图片描述
成功运行出QGIS。
在这里插入图片描述
但是我们的目的是调试QGIS,该如何进行调试呢?
首先,我们需要安装Qt Creator,由于QT环境我们在安装依赖的时候已经安装好了,这里我们只需要安装Qt Creator。输入下面的命令进行安装:

sudo apt-get install qtcreator

安装完毕我们打开Qt Creator:

qtcreator

打开项目,选择源码目录下面的CMakeLists.txt文件打开。
在这里插入图片描述
打开后,我们只需要选择build目录下的Debug模式,因为这个我们之前编译好了,不需要再重新编译。
在这里插入图片描述
然后点击“Configure Project”,生成项目。
生成项目后,可以正常运行。
在这里插入图片描述
调试项目也是正常的。
在这里插入图片描述
到此,教程结束。
注意:调试项目需要的处理器开销比较大,请务必给虚拟机多设置几个处理器。

相关文章:

  • 合并两个有序链表(C++)
  • TensorRT量化实战课YOLOv7量化:YOLOv7-PTQ量化(一)
  • 【每日一题Day362】LC274H 指数 | 二分答案
  • iOS_Crash 四:的捕获和防护
  • es之null_value
  • Python——自动创建文件夹
  • 一个基于Excel模板快速生成Excel文档的小工具
  • 23种设计模式(10)——门面模式
  • 在Go中处理时间数据
  • Knife4j使用教程(一) -- 在不同版本SpringBoot,选用不同的Knife4j相关的jar包
  • Linux系统之file命令的基本使用
  • Google单元测试sample分析(一)
  • elementUI 特定分辨率(如1920*1080)下el-row未超出一行却换行
  • Python深度学习实战-基于tensorflow原生代码搭建BP神经网络实现分类任务(附源码和实现效果)
  • Python:实现日历到excel文档
  • 【Amaple教程】5. 插件
  • Android优雅地处理按钮重复点击
  • CSS中外联样式表代表的含义
  • java第三方包学习之lombok
  • Java-详解HashMap
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Python十分钟制作属于你自己的个性logo
  • Spark in action on Kubernetes - Playground搭建与架构浅析
  • spring + angular 实现导出excel
  • Spring Cloud中负载均衡器概览
  • Vue学习第二天
  • 解析带emoji和链接的聊天系统消息
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 使用docker-compose进行多节点部署
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 数组的操作
  • 宾利慕尚创始人典藏版国内首秀,2025年前实现全系车型电动化 | 2019上海车展 ...
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • ​卜东波研究员:高观点下的少儿计算思维
  • ​软考-高级-系统架构设计师教程(清华第2版)【第9章 软件可靠性基础知识(P320~344)-思维导图】​
  • !!Dom4j 学习笔记
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (1) caustics\
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (a /b)*c的值
  • (Java)【深基9.例1】选举学生会
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (南京观海微电子)——I3C协议介绍
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (三)c52学习之旅-点亮LED灯
  • .NET 8.0 发布到 IIS
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Core6.0 MVC+layui+SqlSugar 简单增删改查
  • .net refrector
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @Responsebody与@RequestBody
  • [20170705]lsnrctl status LISTENER_SCAN1
  • [BUUCTF 2018]Online Tool
  • [C/C++]数据结构 循环队列