当前位置: 首页 > news >正文

在中标麒麟上从源码编译QGIS 3.4.7:一份踩坑无数的依赖库安装指南

中标麒麟系统源码编译QGIS 3.4.7全攻略:依赖库管理与疑难解析

当国产操作系统遇上专业地理信息系统软件,技术适配往往成为一场充满挑战的探险。在中标麒麟这类基于安全优先设计的国产平台上,从源码构建QGIS这类复杂软件,更像是在解一道多维度的技术方程——需要同时考虑系统架构特性、依赖库版本兼容性以及编译工具链的协调。不同于Deepin、优麒麟等Debian系发行版可直接通过软件源安装,中标麒麟用户常需要直面"依赖地狱"的考验。

这份指南将彻底拆解QGIS 3.4.7在中标麒麟NeoKylin上的完整编译过程,特别聚焦那些官方文档未曾详述的依赖库陷阱。我们不仅提供可复现的操作步骤,更会深入分析每个关键依赖的版本选择逻辑,帮助开发者建立系统化的源码编译思维。以下技术方案已在搭载中标麒麟v7.0(基于Fedora 21)的龙芯3A4000平台验证通过,同样适用于x86架构版本。

1. 编译环境准备与基础工具链配置

中标麒麟默认搭载的GCC 4.9编译器仅支持C++11标准,这直接决定了我们选择QGIS 3.4.7而非更新版本——因为从QGIS 3.6开始需要C++17支持。在开始前,请确保系统已更新至最新状态:

sudo yum update -y sudo yum groupinstall -y "Development Tools"

基础依赖安装清单(中标麒麟软件源可获取版本):

  • 编译工具:cmake 2.8, automake 1.13, libtool 2.4
  • 核心库:zlib 1.2, sqlite 3.7, libxml2 2.9
  • Python环境:python2.7, python-devel(QGIS 3.4.7尚未完全迁移到Python3)

注意:中标麒麟默认Python环境可能存在路径配置问题,建议通过alternatives --config python确保/usr/bin/python指向正确版本。

对于无法通过yum获取的较新工具,推荐从源码构建cmake 3.16+:

wget https://cmake.org/files/v3.16/cmake-3.16.9.tar.gz tar -xzf cmake-3.16.9.tar.gz cd cmake-3.16.9 ./bootstrap --prefix=/usr/local make -j$(nproc) sudo make install

环境变量配置建议添加到~/.bashrc:

export PATH=/usr/local/bin:$PATH export LD_LIBRARY_PATH=/usr/local/lib64:$LD_LIBRARY_PATH

2. 关键依赖库编译实战:Qt5与GDAL的定制化构建

2.1 Qt5框架的兼容性构建

QGIS 3.x系列对Qt5的依赖极为严格,官方推荐使用Qt 5.12 LTS版本。在中标麒麟上编译时需特别注意:

  1. 下载源码并配置基础选项:
wget https://download.qt.io/archive/qt/5.12/5.12.8/single/qt-everywhere-src-5.12.8.tar.xz tar -xJf qt-everywhere-src-5.12.8.tar.xz cd qt-everywhere-src-5.12.8
  1. 关键配置参数(适配中标麒麟环境):
./configure -prefix /opt/Qt5.12.8 \ -opensource \ -confirm-license \ -nomake examples \ -nomake tests \ -qt-xcb \ -skip qtwebengine \ -xplatform linux-g++ \ -no-pch
  1. 常见问题解决:
  • GL/gl.h缺失:安装mesa相关开发包sudo yum install mesa-libGL-devel
  • xcb依赖错误sudo yum install libxcb libxcb-devel xcb-util xcb-util-devel
  • icu库不匹配:禁用icu支持-no-icu

编译完成后建议验证Qt5功能:

export QT5DIR=/opt/Qt5.12.8 $QT5DIR/bin/qmake -v # 应显示Qt 5.12.8版本信息

2.2 GDAL地理数据抽象层构建

GDAL作为QGIS的核心数据引擎,其2.4.1版本与QGIS 3.4.7兼容性最佳。编译时需要特别关注Proj和Geos的版本配套:

wget https://github.com/OSGeo/gdal/releases/download/v2.4.1/gdal-2.4.1.tar.gz tar -xzf gdal-2.4.1.tar.gz cd gdal-2.4.1

配置参数示例(假设Proj 7.2已安装在/usr/local):

./configure --prefix=/usr/local \ --with-proj=/usr/local \ --with-geos=/usr/local/bin/geos-config \ --with-sqlite3 \ --with-curl \ --with-xml2

可能遇到的典型错误及解决方案:

错误类型表现特征解决方法
Proj版本冲突'proj_api.h' not found确保--with-proj指向正确安装路径
Geos链接失败undefined reference to GEOS*检查geos-config路径是否在PATH中
Python绑定问题gdal-config: not found安装python-gdal绑定sudo yum install gdal-python

编译安装后建议运行验证测试:

gdalinfo --version # 应显示GDAL 2.4.1 ogrinfo --version # 检查OGR组件

3. Python生态与地理空间库的适配

QGIS 3.4.7仍部分依赖Python 2.7环境,但建议同时配置Python 3.6+以支持未来扩展。关键Python依赖包括:

  • PyQt5:必须与Qt5主版本严格匹配(5.12)
  • QScintilla:代码编辑组件,需要2.11.x系列
  • SIP:PyQt的绑定工具,推荐4.19.25

通过pip安装时需指定版本:

pip2 install PyQt5==5.12.3 QScintilla==2.11.6 SIP==4.19.25

地理空间相关Python库的版本要求:

库名称推荐版本备注
numpy1.16.6最后一个支持Py2.7的稳定版
psycopg22.8.6PostgreSQL连接适配
pyproj1.9.6需与Proj库版本匹配
matplotlib2.2.5绘图支持

重要提示:中标麒麟默认的Python路径可能被系统工具依赖,建议使用virtualenv创建独立环境:

virtualenv -p /usr/bin/python2.7 /opt/qgis_python source /opt/qgis_python/bin/activate

4. QGIS本体编译与系统集成

完成所有依赖准备后,QGIS本体的编译相对直接,但有几个关键配置点需要注意:

  1. 获取源码并创建构建目录:
wget https://github.com/qgis/QGIS/archive/final-3_4_7.tar.gz tar -xzf final-3_4_7.tar.gz mkdir QGIS-build && cd QGIS-build
  1. CMake配置示例(需根据实际路径调整):
cmake ../QGIS-final-3_4_7 \ -DCMAKE_INSTALL_PREFIX=/opt/qgis-3.4.7 \ -DQT5_DIR=/opt/Qt5.12.8/lib/cmake/Qt5 \ -DPYTHON_EXECUTABLE=/opt/qgis_python/bin/python \ -DGDAL_CONFIG=/usr/local/bin/gdal-config \ -DGEOS_CONFIG=/usr/local/bin/geos-config \ -DWITH_3D=ON \ -DWITH_GRASS=OFF \ -DWITH_SERVER=OFF
  1. 编译优化技巧:
  • 使用ccache加速后续编译:-DUSE_CCACHE=ON
  • 控制并行编译线程数:make -j$(($(nproc)-1))
  • 分离调试信息:strip --strip-unneeded output/bin/qgis

安装后的系统集成工作:

  • 创建桌面快捷方式(/usr/share/applications/qgis.desktop):
[Desktop Entry] Name=QGIS 3.4.7 Exec=/opt/qgis-3.4.7/bin/qgis Icon=/opt/qgis-3.4.7/share/qgis/images/icons/qgis-icon.png Type=Application Categories=GIS;Science;
  • 环境变量配置(/etc/profile.d/qgis.sh):
export PATH=/opt/qgis-3.4.7/bin:$PATH export LD_LIBRARY_PATH=/opt/qgis-3.4.7/lib:$LD_LIBRARY_PATH export QT_PLUGIN_PATH=/opt/qgis-3.4.7/lib/qt/plugins

5. 常见编译错误诊断与修复方案

在中标麒麟平台上编译QGIS时,以下几个典型问题值得特别关注:

5.1 符号链接冲突问题

表现:libQt5Core.so.5: version 'Qt_5.12' not found解决方案:

sudo ldconfig -v | grep Qt5 # 检查链接情况 # 若存在冲突,手动创建正确链接 sudo ln -sf /opt/Qt5.12.8/lib/libQt5Core.so.5 /usr/lib64/

5.2 Proj6+ API变更导致的兼容性问题

QGIS 3.4.7设计时基于Proj 4.x API,与Proj 7.x存在不兼容。临时解决方案:

cd /usr/local/include ln -s proj.h proj_api.h # 创建API兼容层

5.3 Python模块导入错误

当出现ImportError: No module named qgis._core时,检查:

  • PYTHONPATH是否包含/opt/qgis-3.4.7/share/qgis/python
  • Python版本是否与编译时一致

5.4 图形渲染异常

如果QGIS界面出现元素渲染错乱,尝试:

export QT_DEBUG_PLUGINS=1 # 查看插件加载情况 export QT_QPA_PLATFORM=xcb # 强制使用XCB平台

6. 性能优化与后续维护建议

成功编译只是开始,要让QGIS在中标麒麟上稳定运行还需以下优化:

  1. 内存管理

    • 修改QGIS启动脚本,添加JVM参数:
      export QGIS_OPTIONS_PATH=/opt/qgis-3.4.7/resources export QGIS_DISABLE_MMAP=1 # 禁用内存映射提升稳定性
  2. 渲染加速

    • 在设置→选项中启用"使用硬件加速渲染"
    • 配置QT_GRAPHICSSYSTEM=opengl环境变量
  3. 依赖库更新策略

    • 使用ldd检查二进制文件依赖关系:
      ldd /opt/qgis-3.4.7/bin/qgis | grep "not found"
    • 建立本地yum仓库管理自定义编译的rpm包
  4. 崩溃诊断

    • 启用核心转储:
      ulimit -c unlimited echo "/tmp/core.%e.%p" > /proc/sys/kernel/core_pattern
    • 使用gdb分析崩溃现场:
      gdb /opt/qgis-3.4.7/bin/qgis /tmp/core.qgis.12345

对于长期维护,建议建立自动化编译脚本,将关键步骤如依赖检测、版本验证、编译安装等流程固化。同时保持与中标麒麟系统更新的同步测试,特别是在进行安全补丁更新后,需重新验证QGIS核心功能。

http://www.jsqmd.com/news/673608/

相关文章:

  • 从亚稳态到稳定系统:深入芯片内部的异步复位同步释放电路设计
  • AI Agent Harness Engineering 与人类员工协同工作:管理层需要知道的组织变革
  • 别再被直觉骗了!用Python模拟10000次,带你彻底搞懂三门问题(蒙提霍尔悖论)
  • 别再只用球面镜了!手把手教你用Zemax OpticStudio的切比雪夫多项式设计离轴抛物面
  • 3步实现QQ空间备份:永久保存青春记忆的智能工具
  • 华为Pura X上新:型格配色+高配置+鸿蒙6.1,满足高端用户折叠旗舰使用需求
  • await FtpUploadFileAsync(orgTiffFilePath) 是否可以去掉 await
  • 终极指南:如何用OCAT轻松搞定OpenCore配置难题
  • LSTM实战(上篇):微博情感分析——词表构建与数据集加载
  • 程序猿成长计划:MongoDB实战应用与最佳实践
  • Multrin与其他窗口管理工具对比:优势和特点分析
  • 深入TF-A启动流程:BL2阶段如何从FIP文件中精准“捞出”你需要的镜像?
  • 别再折腾了!Linux桌面环境(GNOME/KDE)下iPhone即插即用指南,附常见问题排查
  • Tape测试框架插件生态系统:15+个美化器和报告器终极指南
  • 题解:洛谷 AT_abc396_a [ABC396A] Triple Four
  • Go错误处理与panic恢复
  • 安装 openclaw,hermes 慢的想发疯,fast-mirror-skill 来救了
  • 终极tRPC远程协作指南:类型安全API的10个高效工作技巧
  • 题解:洛谷 AT_abc396_b [ABC396B] Card Pile
  • kangle 自定义404页面
  • 如何使用Hazel Engine的Instrumentor.h实现高效性能分析与优化
  • 新材料企业获客难?诚立胜新材料牵手昊客网络布局AI豆包营销 - 深圳昊客网络
  • 鸿蒙应用智能化实战:基于Flutter与LangChain接入Google Gemini AI
  • 海康威视IVMS-4200在Win Server 2016上卡成PPT?别急着换电脑,试试这3个官方客服给的调优方案
  • 告别“正在定位中”:深入浅出解析SUPL协议如何优化手机GPS冷启动速度
  • YOLOv5至YOLOv12升级:自动驾驶目标检测系统的设计与实现(完整代码+界面+数据集项目)
  • Nanbeige 4.1-3B Streamlit WebUI 运维部署实战:内网穿透与高可用架构
  • 如何使用Prisma管理神经网络训练数据:从入门到精通的完整指南
  • GoUtil高级功能揭秘:如何利用reflects和structs包提升开发效率
  • 包装企业数字化拓新!敬得包装携手昊客网络开启AI豆包营销合作 - 深圳昊客网络