Apo*_*ica 7 c++ g++ clang++ libc++ ubuntu-20.04
我已经用谷歌搜索了几个月试图解决这个问题,但我尝试过的都没有效果。
所以一个简单的程序是这样的:
#include <concepts>
#include <iostream>
int main() {
std::cout << "Test" << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
无法编译并显示错误消息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
Run Code Online (Sandbox Code Playgroud)
如果我寻找我的 C++ 头文件,我可以在以下位置找到它们/usr/include/c++:
> find /usr -name "iostream"
/usr/lib/llvm-10/include/c++/v1/iostream
/usr/include/c++/9/iostream
Run Code Online (Sandbox Code Playgroud)
然而,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).
Run Code Online (Sandbox Code Playgroud)
所以我需要g++安装版本 10 才能获取所需的标头。我以为我拥有所有内容的最新版本,但我认为我可能已经更新了gcc而不是g++. 对于遇到此问题的任何人,请务必仔细检查您的g++ --version,以防万一gcc --version它们不同。
无论如何,以下解决了这个问题:
sudo apt install g++-10