Clang 没有看到基本的标题

我尝试用 Clang 在 Fedora 20上编译一个简单的 hello world,结果如下:

D.cpp: 1:10: 致命错误: 未找到“ iostream”文件

#include <iostream>

我不知道该怎么解决。

124194 次浏览

这是因为没有安装 g + + ,所以不存在 libstdc + + 。

你可以安装 g + + ,或者如果选择 LLVM,安装 LLVM libc + + 并指定你想要使用它,如下所示:

sudo apt-get install libc++-dev
clang++ -stdlib=libc++ <rest of arguments>

您可能希望将/usr/bin/c + + 链接到默认的编译器:

ln -s /usr/bin/c++ /usr/bin/clang++-libc++

然后简单地使用

$ c++ <args_as_usual>

第三点帮我解决了这个问题。

1. 有同样的问题,软呢帽21: : 叮当3.5.0:

clang++ -std=c++14 -pedantic -Wall test_01.cpp -o test_01 -v

2.

ignoring nonexistent directory "/usr/lib/gcc/i686-redhat-linux/4.9.2/include"
#include "..." search starts here:
#include <...> search starts here:
/usr/local/include
/usr/bin/../lib/clang/3.5.0/include
/usr/include
End of search list.
test_01.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>

3.

sudo yum install gcc-c++

4.

#include "..." search starts here:
#include <...> search starts here:
/bin/../lib/gcc/i686-redhat-linux/4.9.2/../../../../include/c++/4.9.2
/bin/../lib/gcc/i686-redhat-linux/4.9.2/../../../../include/c++/4.9.2/i686-redhat-linux
/bin/../lib/gcc/i686-redhat-linux/4.9.2/../../../../include/c++/4.9.2/backward
/usr/local/include
/usr/bin/../lib/clang/3.5.0/include
/usr/include
/usr/lib/gcc/i686-redhat-linux/4.9.2/include
End of search list.

看起来你应该提供与 -stdlib选项您的叮当构建。其中的 -stdlib=libc++-stdlib=libstdc++可能会工作。

关于你的主题还有更多的细节:

什么时候需要使用标志 -stdlib = libstdc + + ?

- stdlib = libstdc + + 帮我解决了这个问题:

{
"tasks": [
{
"type": "shell",
"label": "clang++ build active file",
"command": "clang++",
"args": [
"-std=c++11",
"-stdlib=libstdc++",
"hello.cpp",
"-o",
"hello.out",
"--debug"
],
"group": {
"kind": "build",
"isDefault": true
}
}
],
"version": "2.0.0"

对于任何在谷歌上搜索这个并且有一个 MacOS的人来说,这是我找到的解决方案:

将以下内容添加到. bashrc/. zhrc 文件中

export CPLUS_INCLUDE_PATH=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1

这个应该能修好。

确保已经安装了与 gcc 的最新版本相对应的 libstdc + + 。Clang 似乎标识了最新的 gcc 安装,并且只查看该版本的适当目录。

我尝试重新安装命令行工具和“ ln”命令,但仍然无法修复。

在尝试了网站上几乎所有其他的解决方案之后,这个问题仍然无法解决。但是事情很清楚: 编译器试图在 /usr/include中找到头文件,但是尽管安装了命令行工具,却根本没有这个文件夹。

对我们来说,最直接的方法可能是在这个 IDE 或其他编译器中安装 Xcode 和编码,但不是最低成本的情况。

Mac 有一个内置的 Clang,我们不需要安装额外的编译器。

我们可以检查 CommandLineToos文件夹,如果你还没有安装它,尝试这个命令来提前安装它。

xcode-select --install

CommandLineTools文件夹中,我们可以检查 SDK 的路由,即 /Library/Developer/CommandLineTools/SDKs

/Library/Developer/CommandLineTools/SDK

我们可以使用 MacOSX.sdk,对于我来说,它也是 MacOSX12.0.sdk,来找到标题。在 /Library/Developer/CommandLineTools/SDKs/MacOSX12.0.sdk/usr/include中可以找到 C 基本标头。 /Library/Developer/CommandLineTools/SDK/MacOSX12.0. sdk/usr/include/Library/Developer/CommandLineTools/SDK/MacOSX12.0. sdk/usr/include

但是它不包含 C + + 基本头文件,在 /Library/Developer/CommandLineTools/usr/include中可以找到 C + + 基本头文件。我们可以通过命令 g++ -v在终端中找到这条路线。

G + +-v

因此解决方案是显而易见的,在终端中键入以下命令。

  1. 打开 bash_profile

    Open ~/. bash _ profile

  2. 加上这个。

     export C_INCLUDE_PATH=/Library/Developer/CommandLineTools/SDKs/MacOSX12.0.sdk/usr/include
    
    
    export CPLUS_INCLUDE_PATH=/Library/Developer/CommandLineTools/usr/include
    
  3. 找出来。

    Source ~/. bash _ profile 源 ~/. bash _ profile

此错误将得到修复。

TL; DR : 如果您没有 sudo 访问权限并正在使用 conda,那么您可能需要:

conda install gxx -c conda-forge

在我的例子中,我使用 conda install clangxx安装了 clang++,认为它会安装所需的依赖项,但结果是我错过了 libstdgxx-devel。我想这是 gxx的一个依赖项,所以它作为一个副作用被安装。