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

如何在CMake中将gcc替换为g++-11以支持C++20(WSL Ubuntu环境)

解决CS144 Lab0编译错误:constexpr std::string不支持问题

环境配置

  • WSL, Ubuntu 22.04
  • CMake版本:3.25.2
  • g++版本:11.4.0
  • gcc版本:11.4.0

问题描述

执行cmake --build build时出现编译错误:

error: invalid return type ‘std::string’ {aka ‘std::__cxx11::basic_string<char>’} of ‘constexpr’ function ‘static constexpr std::string ExpectationViolation::boolstr(bool)’
   16 |   static constexpr std::string boolstr( bool b ) { return b ? "true" : "false"; }

constexpr std::string是C20引入的特性,gcc-11仅支持部分实验性C20特性,因此需要升级到gcc-12,但配置默认编译器时遇到问题。

问题根源

已安装gcc-12/g++-12,但未将其添加到update-alternatives的备选列表中,导致系统默认仍使用gcc-11。

解决步骤

1. 将gcc-12和g++-12添加到alternatives

执行以下命令,为gcc和g++添加新版本的备选(优先级100确保高于默认的gcc-11):

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 100
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 100

2. 切换默认编译器

再次执行配置命令,此时会出现可选版本,选择对应gcc-12和g++-12的编号:

sudo update-alternatives --config gcc
sudo update-alternatives --config g++

3. 验证编译器版本

执行命令确认切换成功:

gcc --version
g++ --version

输出应显示版本为12.x.x。

4. 重新构建项目

删除原有build目录,重新执行CMake配置和构建:

rm -rf build
cmake -S . -B build
cmake --build build

替代方案:直接在CMake中指定编译器

如果不想修改系统默认编译器,可在CMake配置时直接指定gcc-12:

cmake -S . -B build -DCMAKE_C_COMPILER=gcc-12 -DCMAKE_CXX_COMPILER=g++-12
cmake --build build

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:01:29