系统环境
Ubuntu 18.04.4 LTS
QGIS代码版本 : QGIS-3.10.5
更换下载源
提示:该步骤不是一定要操作的步骤,可跳过该步骤;但更换成“阿里源”后,采用apt-get安装软件会快很多,你也可以更换其他的源!
修改你的sources.list文件
gedit /etc/apt/sources.list
在编辑器中,把里面的内容替换为“阿里源”提供的内容,保存sources.list,关闭编辑器。“阿里源”内容如下:
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
效果如下:
注意事项:
- Ubuntu不同版本对应不同代号,当前系统使用的是ubuntu 18.04对应代号是Bionic,所以更新源也得用对应版本。网上可查询Ubuntu 各版本代号。
- 更新的时候,要管理员权限!可用su root切换到管理用户。
- ubuntu用户第一次不知道root账户,请用sudo passwd root进行修改密码。
更新本地的包清单(根据source.list清单产生的缓存,以后去阿里源下载包):
visitor@visitor-machine:~$ apt update
编译步骤
1.安装构建依赖(Install build dependencies)
参看INSTALL文件的步骤, 教程中会教我们如何安装依赖库;官方列出了5个发布版本的库,我这里用的Ubuntu 18.04 (bionic),对应的,也安装这个版本的依赖!
如下贴出bionic版本安装依赖的命令:
apt-get install bison ca-certificates ccache cmake cmake-curses-gui dh-python doxygen expect flex gdal-bin git graphviz grass-dev libexiv2-dev libexpat1-dev libfcgi-dev libgdal-dev libgeos-dev libgsl-dev libpq-dev libproj-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 lighttpd locales ninja-build ocl-icd-opencl-dev opencl-headers pkg-config poppler-utils pyqt5-dev pyqt5-dev-tools pyqt5.qsci-dev python3-all-dev 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 txt2tags xauth xfonts-100dpi xfonts-75dpi xfonts-base xfonts-scalable xvfb
注意:
官网上找到的编译教程都会比较新,可能不适用于你下载的源码包。但我们可以在源码包目录下的doc文件夹里,找到对应当前qigs版本的编译文档,该文档名字为INSALL.html。
2.设置ccache(可选项,推荐使用) (用于加快编译速度)
cd /usr/local/bin
sudo ln -s /usr/bin/ccache gcc
sudo ln -s /usr/bin/ccache g++
3.准备您的开发环境
作为一种惯例,我在$HOME/dev/下做我所有的开发工作,所以在这种情况下,我们将为c++开发工作创建一个工作环境,就像这样:
mkdir -p ${HOME}/dev/cpp
cd ${HOME}/dev/cpp
对于后面的所有的操作,将设置为此目录路径。
4.下载源代码(Check out the QGIS Source Code)
参照INSTALL说法,有如下2种检出代码的方式:
1. Anonymous Checkout (没有提交权限,就用这种)
cd ${HOME}/dev/cpp
git clone git://github.com/qgis/QGIS.git
2. Developer Checkout (有代码提交权限,就用这种)
cd ${HOME}/dev/cpp
git clone git@github.com:qgis/QGIS.git
对于以上2种方法,本人为了方便,直接将源码包拷贝到目标目录下解压。
5.开始编译(Starting the compile)
5.1 首先说明下我编译的规划(这一步中,请自行将QGIS的代码解压出来!)
- 代码存放路径:/root/QGIS (这里面看得到INSTALL说明文档)
- makefile存放路径:/root/QGIS/build-master
- 安装时的路径:/root/apps
5.2 创建对应目录
创建apps目录
root@计算机名:/root# mkdir apps
创建build-master目录(将会用于执行ccmake)
root@计算机名:/root/QGIS# mkdir build-master
5.3 使用ccmake生成makefile文件
root@计算机名:/root/QGIS# cd build-master
下面的两个点表示上一级目录:
root@计算机名:/root/QGIS/build-master# ccmake ..
- 当你运行ccmake时(请注意必须输入..),将出现一个菜单界面,但此时没有配置参数,先按一次c键,就会出现配置构建参数;
- 如果希望QGIS具有调试功能,则将CMAKE_BUILD_TYPE设置为Debug;
- 如果你没有root用户访问权限,或不想覆盖现有的QGIS安装,请设置CMAKE_INSTALL_PREFIX,程序将安装到此目录(我通常使用$ {HOME} / apps);
- 配置好后,再按一次c键,然后按g进行generate;
- 完成“ g”的生成后,按“ q”退出ccmake交互式对话框;
- 正常执行完后,你会发现这个目录中有很多makefile文件。
5.4 使用make命令开始编译
注意:make -jX,这里的X填写的是数字,表示编译时用几个核。根据你的平台设置,这可以大大加快构建时间。
# 根据上一步生成的makefile,使用make命令编译代码
root/QGIS/build-master# make -j4
# 编译完后你可以直接运行如下命令启动主程序
# 根据上一步生成的makefile,使用make命令编译代码
root@darling-G7:/root/QGIS/build-master# make -j4
# 编译完后你可以直接运行如下命令启动主程序
root@darling-G7:/root/QGIS/build-master# ./output/bin/qgis
# 若执行的时候,你发现动态链接库找不到;请参考问题清单的Q4、Q5;这里只简要说处理方法
# 用如下命令把生成的lib动态链接库,加入到环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/QGIS/build-master/output/lib/
# 使用make命令安装到系统中
# 这个命令会安装到/root/apps目录,这是由上一步生成makefile时,指定的CMAKE_INSTALL_PREFIX值
root@darling-G7:/root/QGIS/build-master# make install
Ubuntu下遇到的错误
若执行后提示,找不到某个*.so.*文件,如libqgis_app.so.3.10.5; 可使用locate进行定位。
root@计算机名:~/build-master/output/bin# locate libqgis_app.so.3.10.5
/root/build-master/output/lib/libqgis_app.so.3.10.5
这说明本系统中有该动态链接库,只是当前程序找不到该库;这是因为这个库文件不在环境变量中,所以程序找不到;为了解决这个问题,你的控制台需要执行如下命令:
# 临时地把qgis编译生成的库文件,加到动态链接库的变量中
# 你生成的动态链接库目录路径不同,注意更改!
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/apps/lib/
文章参考:https://blog.csdn.net/DanyelleG/article/details/106454423