旧CentOS用Conan 1.*管理Boost依赖时B2报错求助
解决旧CentOS上Conan 1.x构建Boost时B2找不到GLIBCXX版本的问题
问题原因
旧CentOS系统默认的/lib64/libstdc++.so.6版本过低,缺少B2所需的GLIBCXX_3.4.20/GLIBCXX_3.4.21版本。虽然你在Conan Profile的PATH中添加了devtoolset-12的路径,但Linux动态库加载依赖的是LD_LIBRARY_PATH环境变量,而非PATH,导致B2启动时无法找到正确的高版本libstdc++。
另外需要注意:Boost并非全是头文件库,多数组件(如thread、filesystem、system等)需要编译,因此会触发B2构建流程,这也是你遇到该问题的原因。
解决方案
1. 修正Conan Profile的环境变量配置
编辑你的Conan Profile文件,在[env]段添加LD_LIBRARY_PATH,指定devtoolset-12的库路径:
[settings] os=Linux os_build=Linux arch=x86_64 arch_build=x86_64 compiler=gcc compiler.version=12.2 compiler.libcxx=libstdc++11 build_type=Release [options] [build_requires] [env] PATH=/opt/rh/devtoolset-12/root/bin:/opt/rh/devtoolset-12/root/lib/gcc/x86_64-redhat-linux/12:/opt/rh/devtoolset-12/root/lib64 LD_LIBRARY_PATH=/opt/rh/devtoolset-12/root/lib64:/opt/rh/devtoolset-12/root/lib/gcc/x86_64-redhat-linux/12
2. 使用devtoolset的环境脚本启动Conan
如果手动配置环境变量容易出错,可以直接通过scl enable加载devtoolset-12的完整环境,再执行Conan命令:
scl enable devtoolset-12 'conan install ../../conanfile.txt --build missing'
该命令会自动设置好PATH、LD_LIBRARY_PATH等所有必要的环境变量,确保B2和编译器都使用devtoolset-12的版本。
3. 强制Boost仅使用头文件模式
如果确实只需要Boost的头文件组件,可以在Conan Profile的[options]段指定Boost仅构建头文件:
[options] boost:header_only=True
这样Conan会跳过B2构建流程,直接使用Boost的头文件,从根源上避免B2的版本问题。
内容的提问来源于stack exchange,提问作者thebugger
相关产品推荐
相关产品推荐

