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”文件的主要内容,如果未能解决你的问题,请参考以下文章

颤振:“致命错误:找不到模块'位置'”Xcode找不到模块

致命错误:找不到类“Modelmyaccount”

Laravel - 致命错误:未捕获的错误:找不到类'Auth'

致命错误:在中找不到类 'Dotenv\Dotenv'

Clang - 链接时“找不到符号”

致命错误:未捕获的错误:找不到类“App\Config”