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
相关产品推荐
相关产品推荐

