Ubuntu20.04编译Boost for Python遇B2引擎构建错误求助
问题原因
- 标准库开发包缺失:Ubuntu 20.04中默认安装的clang 10未配套完整的C标准库开发文件,
<thread>属于C11标准库核心组件,缺失对应库的开发包会直接导致编译时找不到该头文件。 - Boost B2检测逻辑误判:B2引擎的C++11支持检测依赖编译验证代码的成功执行,由于标准库头文件缺失,检测失败,进而抛出
Toolset 'clang' does not appear to support C++11的错误。 - clang标准库配置不明确:clang在Ubuntu环境中默认未明确指定使用的标准库(如
libstdc++或libc++),导致编译时无法正确加载标准库头文件路径。
解决步骤
1. 安装完整的C++标准库开发包
根据需求选择以下任一标准库安装:
选项A:使用Ubuntu默认的libstdc++(推荐)
执行命令安装对应版本的开发包:
sudo apt update && sudo apt install libstdc++-10-dev
选项B:使用LLVM官方的libc++标准库
若需使用LLVM原生C++标准库,执行:
sudo apt update && sudo apt install libc++-dev libc++abi-dev
2. 验证clang的C++11支持
创建测试文件check_cxx11.cpp:
#include <thread> int main() { std::thread t([](){}); t.join(); return 0; }
根据安装的标准库执行对应编译命令,验证环境是否修复:
- 针对
libstdc++:
clang++ -std=c++11 -stdlib=libstdc++ check_cxx11.cpp -o check_cxx11 && ./check_cxx11
- 针对
libc++:
clang++ -std=c++11 -stdlib=libc++ check_cxx11.cpp -o check_cxx11 && ./check_cxx11
能正常编译运行则说明clang的C++11环境已恢复。
3. 重新配置并编译Boost
进入Boost源码根目录,根据选择的标准库执行对应的bootstrap命令:
选项A:基于libstdc++配置
./bootstrap.sh --with-toolset=clang --cxxflags="-std=c++11 -stdlib=libstdc++" --linkflags="-stdlib=libstdc++"
选项B:基于libc++配置
./bootstrap.sh --with-toolset=clang --cxxflags="-std=c++11 -stdlib=libc++" --linkflags="-stdlib=libc++"
配置完成后执行./b2启动编译,若需针对Python的特定构建,可添加--with-python、python-version=3.x等参数。
内容的提问来源于stack exchange,提问作者Rony Shaji
相关产品推荐
相关产品推荐

