为啥我缺少 C++20 标头?我该如何解决这个问题?
Posted
技术标签:
【中文标题】为啥我缺少 C++20 标头?我该如何解决这个问题?【英文标题】: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.cpp
和 g++ -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 开始支持概念。 【参考方案1】:所以我需要安装 g++
版本 10 来获取所需的标头。我以为我拥有所有东西的最新版本,但我想我可能更新了gcc
而不是g++
。对于遇到此问题的任何人,请务必仔细检查您的 g++ --version
,而不是 gcc --version
,以防它们不同。
无论如何,以下解决了这个问题:
sudo apt install g++-10
【讨论】:
以上是关于为啥我缺少 C++20 标头?我该如何解决这个问题?的主要内容,如果未能解决你的问题,请参考以下文章
Makefile:2: *** 缺少分隔符。停止。我该如何解决这个问题我是 Raylib for C++ 的新手