前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mac 下 clang++ 找不到头文件 stdlib.h

mac 下 clang++ 找不到头文件 stdlib.h

作者头像
饶文津
发布2020-06-02 15:26:16
5.7K0
发布2020-06-02 15:26:16
举报
文章被收录于专栏:饶文津的专栏饶文津的专栏

因为要用 openmp库,用 clang++ 编译 c++程序,出现了如下报错:

代码语言:javascript
复制
clang++ xx.cpp -o xx -fopenmp
/usr/local/Cellar/llvm/7.0.0/include/c++/v1/stdlib.h:94:15:
 fatal error:      'stdlib.h' file not found
#include_next <stdlib.h>
                      ^

探究原因: include_next是在当前文件所在的路径后面的路径(一般有多个搜索路径)里搜索头文件。 报错说明 clang++的 include 搜索路径里/usr/local/Cellar/llvm/7.0.0/include/c++/v1/ 后面的路径中不存在stdlib.h文件。

网上的解决方案

代码语言:javascript
复制
xcode-select install

没有用。

使用命令查看 clang++的 include 搜索路径(#include <...> search starts here: 后面)。

代码语言:javascript
复制
clang++ -E -x c++ - -v < /dev/null

可以看到这些

代码语言:javascript
复制
 /usr/local/Cellar/llvm/7.0.0/include/c++/v1
 /usr/include/c++/v1
 /usr/local/include
 /usr/local/Cellar/llvm/7.0.0/lib/clang/7.0.0/include
 /System/Library/Frameworks (framework directory)
 /Library/Frameworks (framework directory)

发现忽略了不存在的 /usr/include

因为当前的 clang++是用 brew 安装的 llvm 自带的。 尝试了卸载 llvm

代码语言:javascript
复制
brew remove llvm

这时系统里还有 clang++,看起来是 Xcode 的工具链里的。 这时再执行clang++ -E -x c++ - -v < /dev/null可以看到

代码语言:javascript
复制
 /usr/local/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/10.0.0/include
 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/usr/include
 /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks (framework directory)

因为要用 openmp,所以还得用 brew 安装的 llvm。就又安装回来了

代码语言:javascript
复制
brew install llvm

然后通过添加软链接的方式解决问题。

代码语言:javascript
复制
ln -s /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include /usr/include/c++/v1

因为MacOSX10.14.sdk实际上是指向MacOSX.sdk的软链接,所以直接用MacOSX.sdk即可。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档