鲲鹏社区首页
中文
注册
开发者
QGIS 3.18.3 移植指南

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,发现不再报未声明的错误。


本页内容