clang++:致命错误:找不到“unistd.h”文件
Posted
技术标签:
【中文标题】clang++:致命错误:找不到“unistd.h”文件【英文标题】:clang++: fatal error: 'unistd.h' file not found 【发布时间】:2015-03-30 22:42:18 【问题描述】:使用 OS X 10.10.2,我下载了Clang for Mac OS X v. 3.6.0,并尝试编译一个简单的 Hello World 程序。
我使用的命令如下:
(假设您将clang
下载到.
)
cd .
./clang+llvm-3.6.0-x86_64-apple-darwin/bin/clang++ main.cpp
结果是这样的:
In file included from main.cpp:1:
In file included from ./clang+llvm-3.6.0-x86_64-apple-darwin/bin/../include/c++/v1/iostream:37:
./clang+llvm-3.6.0-x86_64-apple-darwin/bin/../include/c++/v1/__config:23:10: fatal error: 'unistd.h' file not
found
这是有道理的,因为没有文件unistd.h
,可以通过
find . -name unistd.h
产生0
结果。
我尝试下载LibC++ source code v. 3.6.0,但即便如此,它也不包含unistd.h
。我在哪里可以找到该文件的官方/原版版本,以及它引用和元引用的文件?
【问题讨论】:
你需要安装xcode。 如果您尝试在 clang 文件夹之外搜索标题会发生什么?例如,/Library 或 /System/Library?find / -name unistd.h
仅在 /Applications/Xcode/*
中找到文件,我试图在不使用 Xcode 的情况下解决问题。
我在 OSX 10.11.4 El Capitan 上尝试“brew upgrade postgresql”时遇到此错误。对我来说,看起来我的 xcode 已经过时了一年......
【参考方案1】:
Clang 不包含 c 库或系统头文件,如果你想在 OS X 上编程,你需要安装 Xcode。This page 有更多详细信息,如果你不想安装整个 Xcode 包,你只能使用命令行工具。
一旦您安装了 Xcode / 命令行工具,您可以使用 Xcode 中包含的 clang 和 gcc 版本或您下载的版本,尽管如果您想要使用 Macports 或 Homebrew 通常更容易使用使用最新版本。
【讨论】:
我可以在任何 clang 版本中使用-I
选项并指向 Xcode 包含文件,例如clang++ -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include main.cpp
。谢谢!
Xcode 的命令行工具可以通过运行xcode-select --install
来安装(Xcode 更新时你需要重新安装)
@user657267 brew install unistd
回复 unistd not found - 你建议我安装哪个特定的自制软件包?【参考方案2】:
运行xcode-select --install
后,该错误消失了。
(我只保留 HomeBrew 的 LLVM 和 clang 定期更新,所以我原来的 macos 标头一定是古老的/不存在的,直到我使用上述命令修复它。)
【讨论】:
【参考方案3】:unistd.h
不是 C 或 C++ 标头!它是一个 POSIX 标头。
您可以安装 XCode,因为它会来自那里,但老实说,我不知道这是否与 Clang 运行时完全兼容。我不是 Mac 用户。
也许你可以找到一个替代方案;例如,你不可能需要unistd.h
来编译“Hello world”程序!
【讨论】:
如果每个操作系统都必须提供自己的unistd.h
,我是否理解正确?这就是我“需要”苹果版的原因吗?这项工作的重点是尽量减少对 Xcode 的依赖……基于 UNIX 的系统没有通用的unistd.h
吗?
Xcode 头文件可以使用 clang,事实上这是在 OS X 上获取系统/c 头文件的唯一方法(除非从苹果的源页面复制它们),OP 将需要 Xcode 来做任何事情除非他不使用任何标题。考虑到 macports 和/或 brew 的存在,在 OS X 上手动安装 clang 通常也是浪费时间。
@user657267:好的,你最好开始回答! ATM 你似乎只是在 cmets 中传播你的答案,这不是为了那个....以上是关于clang++:致命错误:找不到“unistd.h”文件的主要内容,如果未能解决你的问题,请参考以下文章