在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++
而不是GCClibstdc++
?如果在构建应用程序时添加选项-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"