QGIS 3.18.3 移植指南
发表于 2025/10/22
0
作者 | 陈兵
1 介绍
QGIS是基于Qt,使用C++开发的一个用户界面友好、跨平台的开源版桌面地理信息系统,可运行在Linux、Unix、Mac OSX和Windows等平台之上。
本文档介绍了从Windows环境迁移至麒麟OS+鲲鹏处理器环境的操作步骤。
2 环境要求
硬件要求
|
项目 |
说明 |
|---|---|
|
处理器 |
2*鲲鹏920 3226处理器 |
|
内存 |
12*32G 2933MHz |
|
磁盘 |
1*3.6T HDD |
|
网络 |
4*GE(板载) + 4*25GE(TM280) |
操作系统和软件要求
|
软件名称 |
版本 |
|---|---|
|
Kylin |
V10 SP3 |
|
libspatialindex |
1.9.3 |
|
HDF5 |
1.12.1 |
|
NETCDF-C |
4.7.4 |
|
GDAL |
2.3.3 |
|
Botan |
2.17.2 |
|
QCA |
2.2.90 |
|
PyQt |
5.11.3 |
|
Qwt |
6.1.3 |
|
QScintilla |
2.11.2 |
|
QtKeychain |
0.6.2 |
|
QGIS |
3.18.3 |
3 编译环境准备
安装相关依赖。
yum -y install gcc gcc-c++ proj-devel geos-devel sqlite-devel libspatialite-devel rpmrebuild traceroute fio libaio-devel numactl-devel kernel-debug* java-devel dbus-python-devel python3-numpy python3-pip python3-breathe cmake freexl-devel libwebp-devel sqlite-devel cfitsio-devel unixODBC-devel qt5-qtbase-odbc expat-devel python3-sip-devel python3-pyqt5-sip libgta-devel opencl* lzma-devel zstd-devel libgeotiff-devel pcre-devel curl-devel zlib-devel json-c-devel libclc ocl-icd protobuf-devel qt5-qtwebkit-devel postgresql-devel jasper-devel jasper-utils libkml-devel ocl-icd doxygen nss-devel openssl-devel gsl-devel qt5-qtsvg-devel python3-qscintilla-qt5-devel qscintilla-qt5-devel flex bison libzip-devel qt5-qtserialport-devel qt5-qttools-devel exiv2-devel qt5-qtlocation-devel
4 移植步骤
4.1 安装libspatialindex
步骤 1 下载libspatialindex 1.9.3安装包,并上传至服务器“/home”目录。
cd /home
wget https://github.com/libspatialindex/libspatialindex/archive/refs/tags/1.9.3.tar.gz
步骤 2 解压并进入解压后目录。
tar -zxvf 1.9.3.tar.gz
cd libspatialindex-1.9.3
步骤 3 编译安装。
mkdir build && cd build
cmake ..
make -j64 && make install
----结束
4.2 安装HDF5
步骤 1 下载HDF5 1.12.1安装包,并上传至服务器“/home”目录。
cd /home
wget https://github.com/HDFGroup/hdf5/archive/refs/tags/hdf5-1_12_1.tar.gz
步骤 2 解压并进入解压后目录。
tar -zxvf hdf5-1_12_1.tar.gz
cd hdf5-hdf5-1_12_1/
步骤 3 编译安装。
./configure --prefix=/opt/hdf5 --build=aarch64-linux --enable-fortan --enable-shared
make -j`nproc`
make install
步骤 4 配置环境变量。
4.1. 打开“/usr/share/pkgconfig/hdf5.pc”文件。
vi /usr/share/pkgconfig/hdf5.pc
4.2. 按“i”进入编辑模式,添加如下内容。
prefix=/opt/hdf5
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: HDF5
Description: Hierarchical Data Format version 5 library
Version:1.2.1
Libs: -L${libdir} -lhdf5 -lhdf5_hl -lz -lm
Cflags: -I${includedir}
4.3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
4.4. 获取编译和链接参数。
pkg-config --cflags --libs hdf5
4.5. 打开“/etc/profile”文件。
vi /etc/profile
4.6. 按“i”进入编辑模式,添加如下内容。
export PATH=/opt/hdf5/bin:$PATH
export LD_LIBRARY_PATH=/opt/hdf5/lib:$LD_LIBRARY_PATH
export INCLUDE=/opt/hdf5/include:$INCLUDE
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
export PATH=/usr/lib64/qt5/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib:/usr/lib64:/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH
4.7. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
4.8. 使环境变量生效。
source /etc/profile
----结束
4.3 安装NETCDF-C
步骤 1 下载NETCDF-C 4.7.4安装包,并上传至服务器“/home”目录。
cd /home
wget https://codeload.github.com/Unidata/netcdf-c/tar.gz/refs/tags/v4.7.4
步骤 2 解压并进入解压后目录。
tar -zxvf v4.7.4
cd netcdf-c-4.7.4/
步骤 3 编译安装。
./configure --disable-netcdf-4 --prefix=/opt/netcdf
make -j`nproc`
make install
步骤 4 配置环境变量。
4.1. 打开“/etc/profile”文件。
vi /etc/profile
4.2. 按“i”进入编辑模式,添加如下内容。
export PATH=/opt/netcdf/bin:$PATH
export INCLUDE=/opt/netcdf/include:$INCLUDE
export LD_LIBRARY_PATH=/opt/netcdf/lib:$LD_LIBRARY_PATH
4.3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
4.4. 使环境变量生效。
source /etc/profile
步骤 5 验证版本。
nc-config --all
回显中显示对应版本号即生效。
----结束
4.4 安装GDAL
步骤 1 下载GDAL 2.3.3安装包,并上传至服务器“/home”目录。
cd /home
wget https://github.com/OSGeo/gdal/archive/refs/tags/v2.3.3.tar.gz
步骤 2 解压并进入解压后目录。
tar -xf v2.3.3.tar.gz
cd gdal-2.3.3/gdal
步骤 3 编译安装。
ln -s /usr/lib64/libOpenCL.so.1.0.0 /usr/lib64/libOpenCL.so
./configure --prefix=/opt/gdal --with-opencl=yes --with-opencl-include="/usr/include" --with-opencl-lib="-L/usr/lib64 -lOpenCL" --with-spatialite=yes
make -j64 && make install
步骤 4 配置环境变量。
4.1. 打开“/etc/profile”文件。
vi /etc/profile
4.2. 按“i”进入编辑模式,添加如下内容。
export PATH=/opt/gdal/bin:$PATH
export INCLUDE=/opt/gdal/include:$INCLUDE
export LD_LIBRARY_PATH=/opt/gdal/lib:$LD_LIBRARY_PATH
4.3. 按“Esc”键,输入:wq!,按“Enter”保存并退出编辑。
4.4. 使环境变量生效。
source /etc/profile
步骤 5 验证版本。
gdal-config --version
返回如下信息,则表示GDAL 2.3.3版本安装成功。

----结束
4.5 安装Botan
步骤 1 下载Botan 2.17.2安装包,并上传至服务器“/home”目录。
cd /home
wget https://github.com/randombit/botan/archive/refs/tags/2.17.2.tar.gz
步骤 2 解压并进入解压后目录。
tar -zxvf 2.17.2.tar.gz
cd botan-2.17.2
步骤 3 编译安装。
python3 configure.py
make -j64 && make install
----结束
4.6 安装QCA
步骤 1 下载QCA 2.2.90安装包,并上传至服务器“/home”目录。
cd /home
wget https://github.com/KDE/qca/archive/refs/tags/v2.2.90.tar.gz
步骤 2 解压并进入解压目录。
tar xf v2.2.90.tar.gz
cd qca-2.2.90
步骤 3 编译安装。
mkdir build && cd build
cmake ..
make -j64 && make install
----结束
4.7 安装PyQt
步骤 1 下载PyQt 5.11.3安装包,并上传至服务器“/home”目录。
cd /home
wget https://nchc.dl.sourceforge.net/project/pyqt/PyQt5/PyQt-5.11.3/PyQt5_gpl-5.11.3.zip
步骤 2 解压并进入解压后目录。
unzip PyQt5_gpl-5.11.3.zip
cd PyQt5_gpl-5.11.3
步骤 3 安装PyQt。
python3 configure.py
输入yes然后回车,执行以下命令编译安装,时间可能较长。
make -j`nproc` && make install
----结束
4.8 安装Qwt
步骤 1 下载Qwt 6.1.3安装包,并上传至服务器“/home”目录。
cd /home
wget https://codeload.github.com/opencor/qwt/tar.gz/refs/tags/v6.1.3
步骤 2 解压并进入解压后目录。
tar -xf v6.1.3
cd qwt-6.1.3
步骤 3 编译安装。
qmake qwt.pro
make -j64 && make install
----结束
4.9 安装QScintilla
步骤 1 下载QScintilla 2.11.2安装包,并上传至服务器“/home”目录。
cd /home
wget https://www.riverbankcomputing.com/static/Downloads/QScintilla/2.11.2/QScintilla_gpl-2.11.2.tar.gz
步骤 2 解压并进入解压后目录。
tar xf QScintilla_gpl-2.11.2.tar.gz
cd QScintilla_gpl-2.11.2
步骤 3 编译安装。
cd Qt4Qt5
qmake qscintilla.pro
make -j64 && make install
cd ../Python/
python3 configure.py --pyqt=PyQt5
make -j64 && make install
----结束
4.10 安装QtKeychain
步骤 1 下载QtKeychain 0.6.2安装包,并上传至服务器“/home”目录。
cd /home
wget https://github.com/frankosterfeld/qtkeychain/archive/refs/tags/v0.6.2.tar.gz
步骤 2 解压并进入解压后目录。
tar -xf v0.6.2.tar.gz
cd qtkeychain-0.6.2
步骤 3 编译安装。
mkdir build && cd build
cmake ..
make -j`nproc` && make install
----结束
4.11 安装QGIS
步骤 1 准备开发环境。
mkdir -p /home/dev/cpp
cd /home/dev/cpp
步骤 2 下载QGIS 3.18.3源代码,解压并进入解压后目录。
wget https://github.com/qgis/QGIS/archive/refs/tags/final-3_18_3.tar.gz
tar xf final-3_18_3.tar.gz
cd QGIS-final-3_18_3
步骤 3 编译安装。
mkdir build && cd build
ln -s /usr/lib64/libexiv2.so libexiv2.so.26
cmake .. -DGDAL_INCLUDE_DIR=/opt/gdal/include -DGDAL_LIBRARY=/opt/gdal/lib/libgdal.so -DOpenCL_LIBRARY=/usr/lib64/libOpenCL.so -DNETCDF_LIBRARY=/opt/netcdf/lib/libnetcdf.so -DProtobuf_LITE_LIBRARY=/usr/lib64/libprotobuf.so
make -j64 && make install
----结束
5 测试验证
- 无图形界面输入qgis -v查看版本输出是否正常。
- 有图形界面输入qgis查看软件启动是否正常。
6 故障排除
6.1 configure脚本检测不到依赖的解决方法
问题现象描述
在源码编译GDAL的过程中,使用configure脚本时会出现找不到HDF5、PDAL、OpenCL等依赖的情况,但是这些软件已经安装成功,并且库、头文件、执行文件都已经添加至环境变量中。
关键过程、根本原因分析
1. 首先查看configure脚本打印的依赖not found信息,发现提到pkg-config,推测脚本使用了pkg-config程序进行依赖查找,而pkg-config通过环境变量中PKG_CONFIG_PATH路径下的xxx.pc文件进行软件管理。某些软件在安装时未去pkg-config进行注册或者注册路径不在PKG_CONFIG_PATH变量中,所以会导致部分依赖软件找不到。
2. 使用pkg-config查找缺失软件的信息,发现无法找到。通过find / -name <name>.pc查找是否存在该软件的.pc文件,发现部分存在,部分不存在。确认部分依赖未找到是由于缺少.pc文件,或者是.pc文件所在路径并没有配置到PKG_CONFIG_PATH环境变量。
3. 部分缺失软件打印日志未提及pkg-config,所以与.pc文件无关。查看configure的help信息,发现与软件依赖相关的参数,包括缺失软件/库文件的路径指定参数,推测可以通过手动指定的方式进行依赖查找。
结论、解决方案及效果
步骤 1 对于使用find命令可以查找到的.pc文件,可将该文件路径添加到环境变量PKG_CONFIG_PATH(在 `/etc/profile` 中配置),然后激活环境变量,再使用pkg-config查找该软件,发现可以找到,调用GDAL的configure脚本发现也可以找到了。
步骤 2 对于.pc文件找不到的情况,可以手动编写.pc文件,.pc文件中内容格式基本都是一致的,如下:
prefix=/usr/local
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: HDF5
Description: Hierarchical Data Format 5 (HDF5)
Version: 1.12.0
Requires:
Libs: -L${libdir} -lhdf5 -lhdf5_hl
Cflags: -I${includedir}
可以使用大模型进行生成,更改其中的各个路径即可。然后将pc文件放在pkg-config可查找的路径下。再用configure脚本查找发现成功找到依赖。就此通过pkg-config查找的依赖全部找到。
步骤 3 对于像OpenCL这样的依赖缺失,可先将configure脚本帮助信息中相关的选项提取出来,然后对各个路径进行手动输入,例如lib路径会让指定文件夹或直接指定到具体的so库,将其指定完毕后发现也能找到了,就此所有依赖查找问题全部解决。
----结束
6.2 cmake时找不到具体的软件的解决方法
问题现象描述
在进行cmake时,有时会报错找不到软件。
关键过程、根本原因分析
1. 查看CMakeLists.txt,在其中查找缺失软件名相关的内容,发现缺失的软件都是在一个find_package函数中出现,怀疑是该函数查找出现了问题。
2. 查找该函数的搜索原理,发现其查找软件时会使用相对应的Findxxx.cmke脚本文件进行相关路径查找。
3. 使用find命令查找缺失软件对应的cmake文件,确实发现了正在安装软件的目录下有一个cmake目录,该目录中就有着对应的cmake文件,打开对应文件发现其都是使用shell命令进行软件路径的查找,所以只要修改查找逻辑即可找到对应的软件。
结论、解决方案及效果
Findxxx.cmake文件目的常常都是找到对应软件的头文件、库文件,所以直接将路径赋给相应的变量即可,修改过后发现cmake不再报这些包的缺失问题。
6.3 make显示符号或引用未定义的解决方法
问题现象描述
在安装如qscintilla等软件的时候会报错显示某些函数名未声明等信息。
关键过程、根本原因分析
发现存在这种问题先去分析报错的是哪个文件,如果是lib文件,如QScintilla安装时报错libqtkeychain.so找不到一些标识符,先去查找该库是属于哪个软件的,发现是QtKeychain。发现该库属于QtKeychain,Qt的源码中查找未声明的符号,发现该符号在Qt 5.15以上才有,而本次使用的是Qt 5.11.2,所以大概率是QtKeychain安装版本过高。
结论、解决方案及效果
在GitHub中找一个低版本的QtKeychain进行安装,安装后再去安装QScintilla,发现不再报未声明的错误。


