clang++:致命错误:未找到“unistd.h”文件

14

我使用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++源代码版本3.6.0,但是其中甚至没有unistd.h。我在哪里可以找到该文件的官方/原始版本以及被该文件引用和元引用的文件?


2
你需要安装Xcode。 - user657267
如果您尝试在clang文件夹之外的位置搜索头文件会发生什么?例如,/Library或/System/Library? - Alex Reynolds
find / -name unistd.h 只在 /Applications/Xcode/* 中查找文件,而我尝试避免使用 Xcode。 - user4664340
我在尝试在OSX 10.11.4 El Capitan上执行“brew upgrade postgresql”时遇到了这个错误。对我来说,看起来我的xcode已经过时了一年... - Rob
3个回答

7

Clang不包含C库或系统头文件,如果您想在OS X上编程,您需要安装Xcode。此页面提供了一些更多的细节,如果您不想安装整个Xcode软件包,您可以仅获取命令行工具。

一旦您安装了Xcode/命令行工具,您可以使用Xcode附带的clang和gcc版本或您下载的版本,但如果您想要使用最新版本,通常更容易使用MacportsHomebrew


1
我可以在任何clang版本中使用-I选项,并指向Xcode包含文件,例如:clang++ -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.10.sdk/usr/include main.cpp。谢谢! - user4664340
2
可以通过运行 xcode-select --install 命令来安装 Xcode 的命令行工具(每当 Xcode 更新时,您都需要重新安装它们)。 - such
@user657267 brew install unistd 响应未找到 unistd - 你建议我安装哪个特定的 Homebrew 包? - Brad Hein

3
那个错误在运行xcode-select --install之后消失了。我只定期更新HomeBrew的LLVM和clang,所以我的原始macos头文件必须是古老的/不存在的,直到我使用上述命令修复这个问题。

0

unistd.h 不是 C 或 C++ 的头文件!它是 POSIX 头文件。

你可以安装 XCode,因为它会自带这个头文件,但我不确定它是否与 Clang 运行时兼容。我不是 Mac 用户。

也许你可以找到替代方案;例如,编译一个“Hello world”程序根本不需要 unistd.h


如果我理解正确的话,每个操作系统都必须提供自己的 unistd.h,这就是为什么我需要苹果版本的原因吗?整个努力的重点是最小化对 Xcode 的依赖... 难道没有适用于基于 UNIX 的系统的通用 unistd.h 吗? - user4664340
Xcode头文件与clang兼容良好,事实上这是在OS X上获取系统/ c头文件的唯一方法(除非从苹果的源代码页面复制它们),除非不使用任何头文件,否则OP将需要Xcode来完成几乎所有操作。在OS X上手动安装clang通常是浪费时间的,因为存在macports和/或brew。 - user657267
@user657267:好的,你最好开始回答了!目前为止,你似乎只是在评论中散发你的答案,而这并不是它们的用途。 - Lightness Races in Orbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接