运行dlib库练习代码make阶段报不识别-std=c++17错误,gcc4.8.5是否需升级
报错原因判定
你当前的编译报错确实是gcc版本过低导致,必须升级gcc才能解决:
- 你本机的gcc 4.8.5是Red Hat/CentOS 7类系统自带的默认编译器,最高仅能提供实验性的C11语法支持,完全没有内置对C17编译参数的识别能力,这也是日志中直接抛出
unrecognized command line option ‘-std=c++17’错误的核心原因。 - 不存在修改CMake配置降低C标准绕过报错的可行路径:当前版本的dlib从19.21版本开始已经强制要求最低编译标准为C14,后续高版本直接要求完整的C++17支持,远超过gcc 4.8.5的能力上限。
gcc升级操作步骤(适配你当前的Red Hat系系统环境)
全程不需要替换系统自带的默认gcc,避免破坏系统原有工具链的稳定性:
- 安装基础开发依赖包,执行命令:
yum groupinstall "Development Tools" -y - 安装SCL源的基础配置,执行命令:
yum install centos-release-scl -y - 安装可完整支持C++17的devtoolset-9版本gcc,执行命令:
yum install devtoolset-9-gcc devtoolset-9-gcc-c++ -y - 激活当前终端会话的高版本gcc环境,执行命令:
scl enable devtoolset-9 bash - 验证环境是否生效:执行
gcc --version,如果输出版本号为9.x系列,就说明配置成功。
后续编译注意事项
- 一定要删掉之前生成的build目录下的CMake缓存,重新执行cmake配置步骤,不要直接在残留老编译器路径缓存的目录里直接make,否则CMake还是会调用系统自带的老gcc。
- 每次开新终端会话编译代码时,都需要先执行一次
scl enable devtoolset-9 bash激活高版本gcc环境,再走编译流程。
注意:不要直接强制卸载系统自带的gcc 4.8.5替换成高版本,会导致系统自带的依赖编译链路出现连锁故障,devtoolset的临时激活模式是目前最稳妥的升级方式,仅在当前终端会话生效高版本工具链,不改动系统默认配置。
内容的提问来源于stack exchange,提问作者Tain Kim
相关产品推荐
相关产品推荐

