【问题标题】:Why am I missing C++20 headers? And how do I fix this?为什么我缺少 C++20 标头?我该如何解决这个问题?
【发布时间】:2021-11-01 09:06:00
【问题描述】:

几个月来我一直在谷歌搜索试图解决这个问题,但我没有尝试过任何工作。

这样一个简单的程序:

#include <concepts>
#include <iostream>

int main() {
    std::cout << "Test" << std::endl;
    return 0;
}

编译失败,错误消息fatal error: 'concepts' file not found。 clang++ 和 g++ 编译器都会发生这种情况。 (为了完整性:clang++-11 -std=c++20 test.cppg++ -std=c++2a test.cpp。)

我的编译器版本是:

> clang++-11 --version
Ubuntu clang version 11.0.0-2~ubuntu20.04.1

> g++ --version
g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

如果我查找我的 C++ 头文件,我可以在 /usr/include/c++ 中找到它们:

> find /usr -name "iostream"
/usr/lib/llvm-10/include/c++/v1/iostream
/usr/include/c++/9/iostream

但是,find /usr -name "concepts" 什么也没提供。所以标题肯定丢失了。连同所有其他特定于 C++20 的头文件,以及在其他头文件中定义的特定于 C++20 的函数(例如 [std::bit_width][1] - 可以包含头文件但未定义函数)。

顺便说一句,我可以使用所有 C++20 功能。例如,我可以定义自己的概念,虽然我不能使用概念头。

奇怪的是,我在谷歌上搜索这类问题的地方无处不在,我能找到的唯一问题是使用不支持 C++20 的旧编译器的人,或者缺少所有 C++ 头文件(或者编译器可以找不到他们)。但是我不确定我应该做什么,因为我的编译器显然支持 C++20,但我缺少 C++20 头文件。

我确实尝试查看libstdc++ 是否需要更新,但无济于事:

> sudo apt install libc++-dev
[...]
libc++-dev is already the newest version (1:10.0-50~exp1).

【问题讨论】:

  • 有一个很好的 feature test 程序(在示例区域中),您可以使用 C++20 编译和运行它,生成的程序会告诉您哪些 C++20 功能可用于您的特定编译器。 (许多编译器的 C++20 实现还没有 100% 完成。)
  • gcc 从版本 10 开始支持概念。

标签: c++ g++ clang++ ubuntu-20.04 libc++


【解决方案1】:

所以我需要安装 g++ 版本 10 来获取所需的标头。我以为我拥有所有东西的最新版本,但我想我可能更新了gcc 而不是g++。对于遇到此问题的任何人,请务必仔细检查您的 g++ --version,而不是 gcc --version,以防它们不同。

无论如何,以下解决了这个问题:

sudo apt install g++-10

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 2020-03-12
    • 2021-08-18
    • 2020-03-25
    • 2020-02-14
    相关资源
    最近更新 更多