使用g++4.8.5编译Boost1.77.0项目提示C++标准不满足如何解决
根因分析
GCC 4.8.5的C11标准支持属于实验性、不完整的实现,未覆盖C11要求的所有标准库组件,尤其是type_traits相关模块的实现缺失,无法满足Boost 1.77.0的最低编译要求,因此触发报错。
另外你当前的编译命令存在拼写错误:-lphtread应为-lpthread,建议先修正该错误再尝试以下方案。
可落地解决方案
- 方案一:降级Boost版本(优先推荐)
Boost 1.69及更早版本是官方兼容GCC 4.8.5的最后几个稳定版本,替换当前的Boost 1.77.0为1.69版本即可直接兼容,无需修改项目业务代码,改造成本最低。 - 方案二:强制绕过Boost编译检查
若必须使用Boost 1.77.0的特定特性,可在编译参数中添加宏定义强制跳过该检查,修改后的编译命令如下:
注意:该方案存在风险,若项目后续用到Boost中依赖g++ -std=c++11 -DBOOST_NO_CXX11_HDR_TYPE_TRAITS=0 main.cpp Logger.cpp MOCMesh.cpp Mesh.cpp CFDMesh.cpp Solver.cpp -o main -I../tools -I/usr/code/include -I. -L/usr/code/lib -lgmp -lpthread -lmpfrtype_traits特性的组件,可能出现编译失败、运行结果异常等未定义问题,仅适合确认未用到相关特性的场景临时使用。 - 方案三:移除Boost依赖
若项目仅用到Boost的少量基础功能,可将依赖的Boost组件替换为兼容GCC 4.8.5的轻量第三方实现,或自行编码实现对应功能,完全移除对Boost库的依赖。
内容的提问来源于stack exchange,提问作者Xiang Yue
相关产品推荐
相关产品推荐

