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

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”,生成项目。
生成项目后,可以正常运行。
在这里插入图片描述
调试项目也是正常的。
在这里插入图片描述
到此,教程结束。
注意:调试项目需要的处理器开销比较大,请务必给虚拟机多设置几个处理器。


http://www.kler.cn/news/108833.html

相关文章:

  • C#两个表多条件关联写法
  • 基于springboot,vue校园社团管理系统
  • 【pandas技巧】group by+agg+transform函数
  • Mysql第四篇---数据库索引优化与查询优化
  • IconWorkshop中文官方版下载_IconWorkshop最新版下载v6.91汉化破解版下载
  • Docker安装部署Elasticsearch+Kibana+IK分词器
  • 网络搭建和运维的基础题目
  • C++设计模式_16_Adapter 适配器
  • Java游戏修炼手册:2023 最新学习线路图
  • EtherNet/IP转profienrt协议网关连接EtherNet/IP协议的川崎机器人配置方法
  • 【LeetCode】3. 无重复字符的最长子串
  • 二叉树的概念
  • 竹云产品入选《2023年度上海市网络安全产业创新攻关成果目录》
  • 【操作系统】进程的控制和通信
  • Pytorch整体工作流程代码详解(新手入门)
  • selenium工作原理和反爬分析
  • JavaWeb 怎么在servlet向页面输出Html元素?
  • Leetcode.274 H 指数
  • Starknet开发工具
  • 解决找不到vcruntime140.dll,无法继续执行代码方法
  • SOLIDWORKS PDM 2024数据管理5大新功能
  • 简单方法搭建个人网站
  • DeOldify 接口化改造 集成 Flask
  • STM32:串口轮询模式、中断模式、DMA模式和接收不定长数据
  • git 推送到github远程仓库细节处理(全网最良心)
  • matlab中narginchk函数用法及其举例
  • FPGA_状态机工作原理
  • 前端小技巧: TS实现new出一个对象的内部过程
  • 独创改进 | RT-DETR 引入 Asymptotic Hybrid Encoder | 渐进混合特征解码结构
  • maven环境变量,安装源,本地仓库配置