You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS7下CMake强制链接新版QGIS3.18库而非旧版2.14的问题

解决CentOS 7下强制链接指定路径QGIS 3.18库的CMake配置方案

要搞定这个问题,核心就是让CMake彻底跳过/usr/lib64的旧版库,优先搜索你指定的QGIS 3.18安装路径,下面是具体的修改步骤:

1. 硬指定QGIS根目录,把库路径设为最高优先级

在CMakeLists.txt最开头,先明确QGIS 3.18的安装根路径,然后强制让CMake先搜这个路径的库和头文件:

# 设定QGIS 3.18的安装根目录
set(QGIS_INSTALL_ROOT "/sitr/LIB_QGIS/QGIS3/usr/local")

# 让这个库路径的搜索优先级高于系统默认路径
link_directories(BEFORE "${QGIS_INSTALL_ROOT}/lib")
# 同步指定头文件路径,确保编译时用新版头文件
include_directories(BEFORE "${QGIS_INSTALL_ROOT}/include/qgis")

这里的BEFORE是关键,它会让CMake先查你指定的路径,再去看系统默认的/usr/lib64。

2. 跳过CMake默认的QGIS查找模块,手动指定库文件

CMake自带的FindQGIS.cmake会优先找系统里的旧版库,直接绕开它,手动写死新版库的绝对路径:

# 列出你需要的QGIS 3.18库文件,按需添加
set(QGIS_LIBRARIES
  "${QGIS_INSTALL_ROOT}/lib/libqgis_core.so"
  "${QGIS_INSTALL_ROOT}/lib/libqgis_gui.so"
  "${QGIS_INSTALL_ROOT}/lib/libqgis_analysis.so"
)

# 把这些库链接到你的目标程序上
target_link_libraries(你的程序名称 PRIVATE ${QGIS_LIBRARIES})

直接用绝对路径指定库,彻底杜绝CMake去搜旧版的可能。

3. 验证链接是否生效

编译完成后,用ldd命令检查程序依赖,确认所有QGIS库都指向新版路径:

ldd 你的程序可执行文件 | grep qgis

如果输出全是/sitr/LIB_QGIS/QGIS3/usr/local/lib/下的库,就说明成功了。

额外提醒

  • 编译前一定要清空之前的CMake缓存(删掉build目录重新cmake),不然旧的查找结果会干扰。
  • 如果用到QGIS插件,记得同步指定插件目录:
    add_definitions(-DQGIS_PLUGIN_DIR="${QGIS_INSTALL_ROOT}/lib/qgis/plugins")
    

内容的提问来源于stack exchange,提问作者Khalil Dhahbia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 08:58:21