CentOS7源码安装Boost后CMake无法找到正确版本问题
问题原因
两个配置错误导致CMake找不到你安装的Boost 1.67.0:
- 头文件路径配置错误:执行
./b2 install时指定前缀为/opt/boost,头文件会安装到/opt/boost/include目录,库文件才会存到/opt/boost/lib目录。你传入的-DBOOST_INCLUDEDIR=/opt/boost/lib/指向了库存放路径,CMake找不到对应版本的头文件,就会回退到系统默认路径下自带的1.53.0版本。 - 没有禁用系统路径搜索,也没有指定Boost库的搜索路径,CMake优先匹配到了系统预装的低版本。
你之前核对的库存放位置:Boost安装后lib目录截图
解决步骤
- 先清理项目构建目录下的CMake缓存,否则之前记录的错误路径会持续生效,修改参数也不会生效:
# 进入你项目存放CMake编译缓存的build目录,执行删除 rm -rf ./* CMakeCache.txt
- 执行以下命令重新做CMake配置,参数修正了路径,同时强制CMake优先搜索你手动安装的Boost版本:
cmake \ -DBOOST_ROOT=/opt/boost \ -DBOOST_INCLUDEDIR=/opt/boost/include \ -DBOOST_LIBRARYDIR=/opt/boost/lib \ -DBoost_NO_SYSTEM_PATHS=ON \ -DBoost_NO_BOOST_CMAKE=ON \ -DCMAKE_BUILD_TYPE=Debug \ -G "Unix Makefiles" \ ..
参数说明:
BOOST_ROOT:指定Boost安装根目录,是FindBoost模块优先级最高的搜索路径BOOST_INCLUDEDIR:修正为正确的头文件存放路径BOOST_LIBRARYDIR:指定Boost库文件的搜索路径Boost_NO_SYSTEM_PATHS=ON:禁止CMake搜索系统默认的/usr/include、/usr/lib路径,避免被系统自带的1.53.0版本干扰Boost_NO_BOOST_CMAKE=ON:跳过Boost自带的CMake配置脚本,避免跨版本兼容问题
- (可选,避免后续运行程序时找不到Boost动态库)将Boost库路径加入系统动态链接库配置:
echo "/opt/boost/lib" > /etc/ld.so.conf.d/boost-1.67.conf ldconfig
配置完成后查看CMake输出,会显示识别到的Boost版本为1.67.0,头文件路径为/opt/boost/include、库路径为/opt/boost/lib,即可正常编译。
注:你之前安装Boost时使用
--with=all参数编译了全部组件,不会出现缺少指定组件的问题,如果后续换其他编译选项,需要确认find_package(Boost)中要求的组件都已经完成编译安装。
内容的提问来源于stack exchange,提问作者Parisa.H.R
相关产品推荐
相关产品推荐

