You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake编译报错不识别-std=c++20选项 如何指定GCC版本

你的判断是对的,这个报错的根因就是当前默认调用的GCC 9不支持-std=c++20编译选项:GCC从11版本开始才正式支持C++20标准的-std=c++20参数,9/10版本仅支持实验性的-std=c++2a,和报错提示完全吻合。你系统已经安装了gcc-11,不需要修改项目源码里的CMakeLists.txt或者生成的Makefile,按以下步骤操作即可:

前置操作:清理旧的CMake缓存

CMake会在首次配置时缓存检测到的编译器路径,直接改配置不会生效,必须先清空之前的构建目录内容:

rm -rf ./[binary_dir]/*

推荐方案:CMake配置阶段指定编译器

在首次生成构建文件时,通过参数直接指定C/C++编译器路径,这是最稳定、不会影响系统全局配置的方案:

cmake -S . -B ./[binary_dir] \
  -DCMAKE_C_COMPILER=/usr/bin/gcc-11 \
  -DCMAKE_CXX_COMPILER=/usr/bin/g++-11

配置完成后正常执行编译命令即可:

cmake --build ./[binary_dir]/

备选方案:通过环境变量指定编译器

也可以在执行cmake配置前导出CC/CXX环境变量,CMake会自动读取这两个变量选择编译器:

export CC=/usr/bin/gcc-11
export CXX=/usr/bin/g++-11
cmake -S . -B ./[binary_dir]

配置完成后正常编译即可。

注意避坑

  • 不要直接修改/usr/bin/gcc的默认软链接指向gcc-11,会破坏系统工具链依赖,后续系统更新、安装软件包可能出现异常。
  • 如果切换gcc-11后仍然在编译bzip2的C源文件(bcompress.c)时报参数错误,是项目配置误将C20标准选项加到了全局C编译参数里,临时解决可以在cmake配置时追加-DCMAKE_C_FLAGS="-Wno-error"参数忽略该警告,或者修改对应子目录的编译选项配置,移除C编译流程里的C标准参数。

内容的提问来源于stack exchange,提问作者fugmug

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 09:57:32