Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Clang+中定位iostream+;:致命错误:';iostream&x27;找不到文件 我写了以下简单的C++程序: #include <iostream> using namespace std; int main() { cout << "Hello, World" << endl; return 0; }_C++_Linux_Clang_Clang++ - Fatal编程技术网

在Clang+中定位iostream+;:致命错误:';iostream&x27;找不到文件 我写了以下简单的C++程序: #include <iostream> using namespace std; int main() { cout << "Hello, World" << endl; return 0; }

在Clang+中定位iostream+;:致命错误:';iostream&x27;找不到文件 我写了以下简单的C++程序: #include <iostream> using namespace std; int main() { cout << "Hello, World" << endl; return 0; },c++,linux,clang,clang++,C++,Linux,Clang,Clang++,单独查看这些文件夹,我发现在/usr/bin/./lib/gcc/x86_64-linux-gnu/8/./../../../../../../../include/c++(或者更简单地说,在/usr/include/c++)中,我有以下目录: drwxr-xr-x 5 root root 4.0K Feb 4 09:38 . drwxr-xr-x 101 root root 20K Feb 4 12:22 .. drwxr-xr-x 12 root root 12K May 24

单独查看这些文件夹,我发现在
/usr/bin/./lib/gcc/x86_64-linux-gnu/8/./../../../../../../../include/c++
(或者更简单地说,在
/usr/include/c++
)中,我有以下目录:

drwxr-xr-x   5 root root 4.0K Feb  4 09:38 .
drwxr-xr-x 101 root root  20K Feb  4 12:22 ..
drwxr-xr-x  12 root root  12K May 24  2018 5
drwxr-xr-x  12 root root  12K Oct  9 14:53 7
drwxr-xr-x   5 root root 4.0K Feb  4 09:38 v1
lrwxrwxrwx   1 root root    1 Apr 11  2018 5.5.0 -> 5
lrwxrwxrwx   1 root root    1 Apr 15  2018 7.3.0 -> 7
5
7
v1
目录中的每个目录中都存在一个名为
iostream

同样在
/usr/include/x86_64-linux-gnu
中存在一个
c++
目录,它看起来与此目录一模一样(包含
5
7
5.5.0
7.3.0
目录)

同样在
/usr/include
中存在一个
c++
目录,它看起来与上面两个目录完全相同

我不确定我的开发环境是如何变得如此混乱的,但现在我只想知道如何修复它,以便Clang++能够成功地找到
iostream
的这9个实例之一,而不是抛出一个不存在的错误。我是否需要添加一个环境变量来告诉Clang在哪里查找?我是否需要传递一个命令行参数来告诉Clang递归搜索

更新(1) 当我尝试使用
libc++
构建时,出现以下错误:

main.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^~~~~~~~~~
1 error generated.
$> clang++ -stdlib=libc++ main.cpp
/usr/bin/ld: cannot find -lc++abi
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$> clang++ -isystem /usr/include/c++/7 -isystem /usr/include/x86_64-linux-gnu/c++/7 main.cpp
/usr/bin/ld: cannot find -lstdc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)
当我尝试手动覆盖include路径进行构建时,会出现以下错误:

main.cpp:1:10: fatal error: 'iostream' file not found
#include <iostream>
         ^~~~~~~~~~
1 error generated.
$> clang++ -stdlib=libc++ main.cpp
/usr/bin/ld: cannot find -lc++abi
clang: error: linker command failed with exit code 1 (use -v to see invocation)
$> clang++ -isystem /usr/include/c++/7 -isystem /usr/include/x86_64-linux-gnu/c++/7 main.cpp
/usr/bin/ld: cannot find -lstdc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)
当我同时尝试这两种方法时,会出现以下错误(非常大):

作为提醒,我只是想编译Hello,World

我还尝试使用以下命令卸载并重新安装Clang:

$> sudo apt-get purge --auto-remove clang
$> sudo apt-get update
$> sudo apt-get install clang
这没有效果。我正在运行Ubuntu18.04,我不知道出了什么问题,也不知道从哪里开始修复它。我的构建环境一团糟

如果可能的话,我想让Clang正常工作,而不是退回到使用G++,因为我的IDE似乎会自动检测到Clang并使用它进行语法检查。这意味着我编写的每个C++程序都有一个致命错误,第一行是“IOFROW未找到”,其余文件都不受检查,因为第一个文件是致命错误。 更新(2) 我尝试过从Ubuntu apt存储库中安装更多的软件包,但没有成功:

$> sudo apt-get install libc++1 libc++1-9 libc++abi1 libc++abi1-9 llvm-9 llvm-9-dev
$> clang++ -isystem /usr/include/c++/7 -isystem /usr/include/x86_64-linux-gnu/c++/7 -stdlib=libc++ main.cpp
/usr/bin/ld: cannot find -lc++
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我还尝试了
sudo apt get install lc++1
,结果发现这是一个完全不相关的软件包

更新(3) 我又花了几个小时试图解决这个问题,从apt和源代码安装了多个软件包,尝试了各种工具的不同版本,手动从其他源代码复制到库中,甚至跳到了Clang IRC上,并直接与几位知识渊博的开发人员交谈

没有人能找出我的笔记本电脑出了什么问题,我也没有做任何事情让它工作


不幸的是,再过两周我就没有这台笔记本电脑了,所以我可能需要以“无法复制”来结束这个问题,因为一旦笔记本电脑不在了,我就无法复制损坏的开发环境。

我也已经被这个问题困扰了很长时间。你应该尝试删除这个文件夹(cd/usr/lib/gcc/aarch64 linux gnu/8)。clang++无法工作的原因是此文件夹不包含libstdc++.a

clang version 6.0.0-1ubuntu2 (tags/RELEASE_600/final)
Target: aarch64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
Found candidate GCC installation: /usr/bin/../lib/gcc/aarch64-linux-gnu/5
Found candidate GCC installation: /usr/bin/../lib/gcc/aarch64-linux-gnu/5.5.0
Found candidate GCC installation: /usr/bin/../lib/gcc/aarch64-linux-gnu/6
Found candidate GCC installation: /usr/bin/../lib/gcc/aarch64-linux-gnu/6.5.0
Found candidate GCC installation: /usr/bin/../lib/gcc/aarch64-linux-gnu/7
Found candidate GCC installation: /usr/bin/../lib/gcc/aarch64-linux-gnu/7.3.0
Found candidate GCC installation: /usr/lib/gcc/aarch64-linux-gnu/5
Found candidate GCC installation: /usr/lib/gcc/aarch64-linux-gnu/5.5.0
Found candidate GCC installation: /usr/lib/gcc/aarch64-linux-gnu/6
Found candidate GCC installation: /usr/lib/gcc/aarch64-linux-gnu/6.5.0
Found candidate GCC installation: /usr/lib/gcc/aarch64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/aarch64-linux-gnu/7.3.0
Selected GCC installation: /usr/bin/../lib/gcc/aarch64-linux-gnu/7.3.0
检查/usr/lib/gcc/aarch64 linux gnu中的所有文件夹/ clang++将选择最后一个版本,确保最后一个版本中有libstdc++.a

首先找到您的版本(路径):

输出:

8
g++ (Ubuntu 8.3.0-6ubuntu1) 8.3.0
然后添加包含路径,并用您的版本替换
8

-I/usr/include/c++/8 
-I/usr/include/x86_64-linux-gnu/c++/8
这在Linux上适用于我:

clang++ -I/usr/include/c++/8 -I/usr/include/x86_64-linux-gnu/c++/8 -L /usr/lib/gcc/x86_64-linux-gnu/8 abc.cpp -o abc

您也可以使用 :

那么这就行了:

clang++ main.cpp -o main
运行:


输出:

8
g++ (Ubuntu 8.3.0-6ubuntu1) 8.3.0
请参见:


我希望这能帮助一些人。

我发现clang在
/usr/lib/gcc/x86_64-linux-gnu/8
(使用
clang++-v
),实际上,它不包含文件
libstdc++.a
。我没有按照另一个答案的建议删除整个目录,而是安装了
libstdc++-8-dev


我使用的是Ubuntu18.04;gcc已经安装。

短版本:确保您的系统上有与最新版本的gcc相对应的libstdc++

在我的系统上,一切都很正常,直到有一天我试图用叮当声编译,但没有找到iostream,它就崩溃了

我在Ubuntu系统中遇到这种情况,因为我安装了一个新版本的GCC,但没有安装相应的C++。在我的特定情况下,我安装了GCC-10,但没有安装LIbSTDC++- 10。当CLAN RAN,它将GCC-10标识为GCC的最新版本(它也识别了其他的,但忽略了它们)。,并且只在适当的位置查找gcc-10

为了解决clang找不到iostream的问题,我安装了libstdc++-10以与clang已经在查找的位置相对应。我通过在失败的compile命令中添加“-v”来识别clang正在查找的位置,并注意到以下输出:

ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/backward"

您是如何构建或安装Clang的?它是否配置为使用自己的
libc++
而不是GCC
libstdc++
?如果在构建应用程序时添加选项
-stdlib=libc++
,会发生什么情况?@Someprogrammerdude我想我确实是
sudo获得了安装Clang
,但老实说,我在这一点上不知道t、 我使用这款笔记本电脑进行开发已经两年了,我必须安装和卸载sun下的每一个工具,以使开源项目正常构建或使第三方代码正常工作。现在还不知道什么时候安装了Clang,也不知道它在我的系统上是如何安装的。我如何检查它是否配置为使用
libc++
stdc++
?@Someprogrammerdude当我使用
stdlib=libc++
时,我得到一个新错误:
找不到-lc++abi
这肯定是我没有发现的
ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/backward"