在银河麒麟V10上编译QGIS 3.26之前,我们需要先做好系统环境的准备工作。银河麒麟作为国产操作系统的代表,其安全机制和软件生态与常见的Linux发行版有些许差异,这也是为什么我们需要特别注意一些细节。
首先确认系统版本,打开终端输入:
bash复制cat /etc/os-release
应该能看到类似"Kylin V10"的标识。我建议使用官方镜像全新安装系统,避免之前安装的软件带来干扰。实测中发现,银河麒麟默认的安全策略可能会影响编译过程,我们需要先调整安全等级:
bash复制sudo setstatus Softmode
sudo getstatus
这个操作相当于暂时降低了系统的安全防护级别,让编译过程能够顺利进行。记得编译完成后可以恢复默认安全等级。
接下来是编译器环境的搭建。银河麒麟默认没有安装g++,我们需要手动安装:
bash复制sudo apt-get update
sudo apt-get install build-essential
这里有个小技巧:如果遇到软件源速度慢的问题,可以尝试更换为国内镜像源。编辑/etc/apt/sources.list文件,将官方源替换为清华或阿里云的镜像源,能显著提升下载速度。
QGIS 3.26的源码可以从GitHub直接获取。我建议创建一个专门的工作目录来管理所有相关文件:
bash复制mkdir -p ${HOME}/dev/QGIS
cd ${HOME}/dev/QGIS
wget https://github.com/qgis/QGIS/archive/final-3_26_0.tar.gz
tar -zxf QGIS-final-3_26_0.tar.gz
使用wget下载比浏览器下载更可靠,特别是大文件时不容易出错。解压后你会得到一个QGIS-final-3_26_0目录,这就是我们的工作基础。
依赖库的安装是最容易出问题的环节。银河麒麟V10的软件源可能缺少某些包,或者版本不匹配。以下是经过验证可用的完整依赖列表:
bash复制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
这个命令看起来很长,但非常重要。建议复制到文本编辑器中检查无误后再执行。安装过程可能需要15-30分钟,取决于你的网络速度。
Python版本问题是编译QGIS时最常见的坑之一。银河麒麟V10默认安装的是Python 3.8.10,但QGIS 3.26可能无法正确识别这个版本。经过多次测试,我发现Python 3.7.x版本兼容性最好。
下面是安装Python 3.7的完整步骤:
bash复制sudo apt update
sudo apt install build-essential zlib1g-dev libbz2-dev libncurses5-dev \
libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget
wget -c https://www.python.org/ftp/python/3.7.4/Python-3.7.4.tgz
tar -xzvf Python-3.7.4.tgz
cd Python-3.7.4
./configure --prefix=/usr/local/src/python37
make -j$(nproc)
sudo make install
安装完成后,我们需要设置系统默认的Python版本:
bash复制sudo ln -s /usr/local/src/python37/bin/python3.7 /usr/bin/python3.7
sudo ln -s /usr/local/src/python37/bin/pip3.7 /usr/bin/pip3.7
sudo rm -rf /usr/bin/python3
sudo ln -s /usr/local/src/python37/bin/python3.7 /usr/bin/python3
sudo ln -s /usr/local/src/python37/bin/pip3.7 /usr/bin/pip3
这些命令做了以下几件事:
验证安装是否成功:
bash复制python3 --version
pip3 --version
应该显示Python 3.7.4和对应的pip版本。这一步非常关键,很多编译错误都是因为Python版本不匹配导致的。
一切准备就绪后,就可以开始编译QGIS了。首先进入源码目录并创建构建目录:
bash复制cd ${HOME}/dev/QGIS/QGIS-final-3_26_0
mkdir build-master
cd build-master
使用ccmake进行交互式配置:
bash复制ccmake ..
在ccmake界面中,按'c'开始配置。这个过程会检查系统环境和依赖关系,可能需要几分钟。配置完成后,按'g'生成Makefile。
注意:如果配置过程中报错,通常是因为缺少某些依赖。仔细阅读错误信息,安装对应的开发包后重新配置。
生成Makefile后,就可以开始编译了:
bash复制make
这里有个重要提示:QGIS的编译不支持并行编译(make -j),必须使用单线程编译。虽然这会增加编译时间(通常需要3-5小时),但能避免很多奇怪的错误。
编译过程中可能会遇到各种警告,但只要不出现致命错误(fatal error)就可以继续。如果编译中断,需要先清理构建目录:
bash复制cd build-master
rm -rf *
然后重新从ccmake步骤开始。这点很重要,因为残留的中间文件可能导致后续编译失败。
编译完成后,可以在output/bin目录下找到生成的可执行文件:
bash复制./output/bin/qgis
第一次启动可能会比较慢,这是正常现象。如果一切顺利,你应该能看到QGIS的启动界面。
为了确保所有功能都正常工作,我建议进行以下测试:
如果遇到启动问题,可以尝试在终端中运行,这样能看到详细的错误输出。常见的问题包括:
在实际编译过程中,我遇到过不少问题,这里分享几个典型问题的解决方法:
问题1:编译过程中报错"Python.h not found"
这是因为Python开发头文件缺失。解决方法:
bash复制sudo apt-get install python3-dev
确保安装的python3-dev版本与你使用的Python版本一致。
问题2:Qt相关组件找不到
银河麒麟的Qt包命名可能与其他发行版不同,可以尝试:
bash复制sudo apt-get install qtbase5-dev qt5-default qttools5-dev-tools
问题3:GIS相关库链接失败
特别是GDAL、GEOS等库,需要确保开发包已安装:
bash复制sudo apt-get install libgdal-dev libgeos-dev
问题4:编译速度极慢
除了不能使用make -j外,可以尝试以下优化:
bash复制sudo apt-get install ccache
export CCACHE_DIR="$HOME/.ccache"
export PATH="/usr/lib/ccache:$PATH"
问题5:运行时崩溃或界面异常
这可能是由于显卡驱动或OpenGL问题导致。尝试:
bash复制export QT_LOGGING_RULES="*.debug=false;qt.qpa.*=true"
./output/bin/qgis
查看日志输出定位问题根源。
成功编译运行QGIS后,我们可以进一步优化使用体验:
创建桌面快捷方式:
编辑~/.local/share/applications/qgis.desktop文件,添加以下内容:
ini复制[Desktop Entry]
Name=QGIS 3.26
Comment=Quantum GIS
Exec=/path/to/your/qgis/executable
Icon=/path/to/qgis/icon.png
Terminal=false
Type=Application
Categories=Education;Geoscience;
StartupNotify=true
设置环境变量:
在~/.bashrc中添加:
bash复制export PATH=$PATH:${HOME}/dev/QGIS/QGIS-final-3_26_0/build-master/output/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:${HOME}/dev/QGIS/QGIS-final-3_26_0/build-master/output/lib
定期更新代码:
如果需要更新到最新代码:
bash复制cd ${HOME}/dev/QGIS/QGIS-final-3_26_0
git pull
cd build-master
make clean
make
空间清理:
编译完成后,可以清理中间文件节省空间:
bash复制cd build-master
make clean
这会保留必要的可执行文件和库,只删除中间对象文件。
经过这些步骤,你应该已经在银河麒麟V10上成功编译并运行了QGIS 3.26。这个过程虽然有些复杂,但能让你更深入地理解QGIS的构建系统和依赖关系。在实际项目中,这样的自定义编译还能让你根据需要启用或禁用特定功能,打造最适合自己工作流的QGIS版本。