廊坊网站建设搭建,上海做网站品牌公司有哪些,软装设计师是干什么的,河南网站优化哪家好在之前的文章中#xff0c;我详细介绍了怎么在Windows下编译QGIS源码#xff0c;也得到了不错的反馈。但是不足的是Windows下只能编译QGIS的Release模式和RelWithDebInfo模式#xff0c;想要分析源码#xff0c;“断点调试”肯定是少不了的#xff0c;但是这两种模式虽然也…在之前的文章中我详细介绍了怎么在Windows下编译QGIS源码也得到了不错的反馈。但是不足的是Windows下只能编译QGIS的Release模式和RelWithDebInfo模式想要分析源码“断点调试”肯定是少不了的但是这两种模式虽然也能做到调试程序但是总有种种不足例如因为代码是优化过的某些调试操作可能会有所不同或略显困难。另外由于某些变量可能被优化掉它们在调试过程中可能不可见等等。所以为了调试程序更方便决定在Unbuntu下编译一个可以调试的QGIS。
由于上一篇在Windows下编译的是QGIS3.18.3版本因此本次在Ubuntu上也选择编译该版本。经测试在Ubuntu 20.04上面编译比较顺利。
主要环境是
Ubuntu 20.04QT 5.12.8Qgis 3.18.3CMake 3.16.3Flex 2.6.4Bison 3.5.1Python 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”生成项目。 生成项目后可以正常运行。 调试项目也是正常的。 到此教程结束。 注意调试项目需要的处理器开销比较大请务必给虚拟机多设置几个处理器。