关于c++编译过程出现找不到头文件的错误

macos系统上次本来想删除/usr/local/include下面pybind11文件夹,结果误删了整个include文件夹,虽然用homebrew重新安装了所有的工具但是不知道什么原因clang++和g++编译器编译过程会出现莫名的报错,有的是找不到头文件比如iostream,了解到include文件夹下存放重要的头文件。

那怎么办呢,我翻遍了整个互联网20年,估计应该也是没有人像我一样会删掉整个include文件夹吧,[擦汗]我记录一下我处理的办法。

首先利用xcode-select -r恢复到默认设置,终端运行:

xcode-select -r


删除bash_profile中所有clang++和g++的环境配置,终端输入clang++应该输出这个

Apple clang version 11.0.0 (clang-1100.0.33.17)
Target: x86_64-apple-darwin21.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

然后在终端查看所有头文件引用位置

cpp -v
#include "..." search starts here:
#include <...> search starts here:
 /usr/local/include
 /Library/Developer/CommandLineTools/usr/lib/clang/11.0.0/include
 /Library/Developer/CommandLineTools/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)
End of search list.

可以看到集中在这几个目录之下,但是include不是被删掉了吗,那不就乱套了,我是直接删掉了这个include文件夹

sudo rm -rf /usr/local/include

然后再输入cpp -v查看

#include "..." search starts here:
#include <...> search starts here:
 /Library/Developer/CommandLineTools/usr/lib/clang/11.0.0/include
 /Library/Developer/CommandLineTools/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks (framework directory)

发现已经没有了/usr/local/include这是因为在没有这个路径的情况下,会跳过这个路径在别的路径中寻找头文件。

然后就可以顺利利用clang++和g++编译了

此外,记录一下用clang++和g++能支持c++11编译的办法,正常情况下,这种编译会报错,原因是auto关键字是c++11以上版本的新东西

test2.cpp:5:32: error: expected ';' at end of declaration
  std::unordered_set<int> mySet{1, 2, 3, 4, 5};
                               ^
                               ;
test2.cpp:9:8: warning: 'auto' type specifier is a C++11
      extension [-Wc++11-extensions]

我们可以在bash_profile中加上这么一句(如果你用的是bash_profile,zshrc就直接改成zshrc就行)或者手动加也行。

# g++就这个
echo "alias g++='g++ -std=c++11'" >> ~/.bash_profile

# clang++就这个
echo "alias clang++='g++ -std=c++11'" >> ~/.bash_profile

这个办法比较暴力,不知道后续在写代码中会遇到哪些问题,不过在你删除include之前最好还是备份一份比较保险,我是被这个问题折磨得焦头烂额了,不得已选择如此暴力的手段,哈哈 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值