升级到 Mojave 后无法在 Mac 上编译 C 程序

我在终端上使用 gcc 命令来编译 C 程序,但突然之间,在更新了我的 Mac 操作系统(MacOS 10.14 Mojave 和 XCode 10.0)之后,我开始收到这样的消息:

test.c:8:10: fatal error: stdio.h: No such file or directory
#include <stdio.h>
^~~~~~~~~
compilation terminated.

我已经安装了 gcc,因为我可以在 /usr/local/bin中找到它,并且确实有一个 gcc 在那里。我试着在另一台 iMac 上运行相同的文件,结果没有任何问题。

我尝试运行 xcode-select --install,它已经被安装,因此它没有修复我现在有的问题。我猜测路径是混乱的,因为在我开始从其他资源复制和粘贴一些命令来解决这个问题之后,它似乎无法找到 gcc

需要帮忙。

130498 次浏览

DR

确保您已经下载了最新的“命令行工具”包,并从终端(命令行)运行它:

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

有关 Catalina 的一些信息,请参见 升级到 Catalina 10.15后无法在 Mac 上编译 C 程序


从相当广泛的评论中抽取出一个半连贯的答案..。

前言

通常情况下,xcode-select --install是正确的解决方案,但这次似乎没有帮助。您试过运行主 Xcode GUI 接口吗?它可能会为您安装一些额外的软件,并清理。我是在安装 Xcode 10.0之后这么做的,但那是在一周或更早之前,远在升级到 Mojave 之前。

我观察到,如果你的 gCC 安装在 /usr/local/bin中,你可能没有使用来自 Xcode 的 gCC,它通常安装在 /usr/bin中。

我也升级到了 macOS 10.14 Mojave 和 Xcode 10.0。但是,系统 /usr/bin/gcc和系统 /usr/bin/clang都适合我(两者都适合 Apple LLVM version 10.0.0 (clang-1000.11.45.2) Target: x86_64-apple-darwin18.0.0) 我有一个问题,我自己建立的 GCC 8.2.0没有找到头在 /usr/include,这是平行的问题与 /usr/local/bin/gcc没有找到头。

我做了一点比较,我的 Mojave 机器根本没有 /usr/include,但是 /usr/bin/clang能够编译 OK。我的旧 /usr/include中有一个头(_stdio.h,带有前导下划线) ; 现在它不见了(因此我在 GCC 8.2.0中遇到了问题)。我运行 xcode-select --install,它说“ xcode-select: note: install requested for command line developer tools”,然后运行一个 GUI 安装程序,它向我显示了一个我同意的许可,它下载并安装了命令行工具ーー至少它是这么说的。

然后我运行了 Xcode GUI (命令空间,Xcode,return) ,它说需要安装更多的软件,但仍然没有 /usr/include。但是我可以用 /usr/bin/clang/usr/bin/gcc编译ーー而且 -v选项表明它们正在使用

InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

工作解决方案

然后 Maxxx 知道了:

我找到办法了。如果我们使用 Xcode 10,你会注意到,如果你在 Finder 中导航到 /usr,你将不会再看到一个名为“ include”的文件夹,这就是为什么终端抱怨没有包含在“ include”文件夹中的头文件。在 Xcode 10.0发行说明中,它说有一个软件包:

/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

你应该安装这个软件包来安装 /usr/include文件夹,然后你就可以开始了。

当所有其他方法都失败时,请阅读手册,或者在这种情况下阅读发布说明。对于苹果公司想要抛弃他们的 Unix 传统,我并不感到非常惊讶,但是我很失望。如果他们小心点,会把我赶走的。谢谢你的信息。

在命令行中使用以下命令安装了包之后,我又有了 /usr/include,我的 GCC 8.2.0又可以工作了。

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

下载命令行工具

正如 维萨尔在一篇有价值的 评论文章中指出的,您需要在 Mojave 10.14上下载 Xcode 10.1的命令行工具包,您可以从以下地址下载:

您需要使用 Apple ID 登录才能获得下载。完成下载后,安装命令行工具包。然后按照“工作解决方案”一节中的描述安装标题。

我在莫哈韦沙漠10.14.1版就是这样。我以前一定下载过这个,但是回答这个问题的时候我已经忘记了。

升级到 Mojave 10.14.4和 Xcode 10.2

大约在2019-05-17,我升级到了 Mojave 10.14.4,Xcode 10.2命令行工具也升级了(或者 Xcode 10.1命令行工具升级到了10.2)。上面显示的 open命令修复了丢失的标头。将主要的 Xcode 升级到10.2,然后重新安装命令行工具和头文件包,这可能仍然是一种冒险。

升级到 Xcode 10.3(用于 Mojave 10.14.6)

在2019年7月22日,我通过 App Store 得到通知,Xcode 10.3的升级版本已经发布,其中包括了 iOS 12.4、 tvOS 12.4、 watch OS 5.3和 macOS Mojave 10.14.6版本的 SDK。我安装了我的10.14.5计算机中的一台,并运行了它,按照它的建议安装了额外的组件,它似乎保持了 /usr/include的完整性。

同一天晚些时候,我发现 macOS Mojave 10.14.6(System Preferences something Software Update)以及一个命令行实用程序包 IIRC (它是自动下载和安装的)也是可用的。安装 o/s 更新确实又一次清除了 /usr/include,但是答案顶部的 open命令再次恢复了它。我在 open命令文件中的日期是2019-07-15。

升级到 XCode 11.0(用于 Catalina 10.15)

XCode 11.0(“包括适用于 iOS 13、 tvOS 13、 watch OS 6和 macOS Catalina 10.15的 Swift 5.1和 SDK”)的升级版于2019-09-21发布。我收到了“可用更新”的通知,下载并安装到运行 macOS Mojave 10.14.6的机器上,通过 App Store 应用程序(更新标签) ,没有任何问题,也不需要使用 /usr/include。在安装之后(在运行应用程序之前) ,我立即尝试了重新编译,结果被告知:

同意 Xcode/iOS 许可需要管理员权限,请运行“ sudo xcodebuild-License”,然后重试这个命令。

运行它(sudo xcodebuild -license)允许我运行编译器。从那时起,我已经运行应用程序来安装它需要的额外组件; 仍然没有问题。当我升级到 Catalina 本身时会发生什么还有待观察ーー但我的 macOS Mojave 10.14.6机器目前都还好(2019-09-24)。

一定要检查 Xcode Preferences-> Location。

我选择的命令行工具用于 Xcode 的早期版本(8.2.1而不是10.1)

在尝试了这里和网上能找到的所有答案之后,我仍然得到一些丢失标题的错误。在尝试编译 pyRFR 时,我遇到了没有找到 stdexcept的错误,显然没有与其他头一起安装在 /usr/include中。然而,我找到了它在莫哈韦沙漠中的藏身之处,并将其添加到了 ~/.bash_profile文件的末尾:

export CPATH=/Library/Developer/CommandLineTools/usr/include/c++/v1

完成这些之后,我现在可以编译 pyRFR 和其他 C/C + + 程序了。根据 echo | gcc -E -Wp,-v -,gcc 正在寻找这些头的旧位置(没有 /c++/v1) ,但不是新位置,所以添加到 CFLAGS 固定它。

我有这个问题和 什么都没用。我运行 xcode-select --install,也安装了 /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

背景

由于我在一台新笔记本电脑上遇到了 应用程序商店的问题,我不得不从苹果网站下载 Xcode < em > Beta 安装程序,以便在 应用程序商店之外安装 Xcode。所以我只安装了 Xcode < em > Beta

解决方案

这使得 clang找不到 SDKROOT目录 /Applications/Xcode.app/....,因为路径中没有 Beta,或者可能 Xcode < em > Beta 根本没有安装它(我不知道)。 为了修复这个问题,我必须删除 Xcode < em > Beta 并解决 应用程序商店问题以安装发行版。

Tldr;

如果您有 Xcode < em > Beta ,尝试清理一切,并安装发行版之前,尝试的解决方案,是为其他人的工作。

正如 Jonathan Leffler 上面指出的那样,macOS _ SDK _ headers. pkg 文件已经不在 Xcode 10.1中了。

对我有效的方法是执行 brew upgrade,对 gcc 和/或其他自制程序在后台所做的更新解决了路径问题。

与 OP 有相似的问题

问题

Cat Hello

#include <stdlib.h>
int main() { exit(0); }

叮当你好

/usr/local/include/stdint.h:2:10: error: #include nested too deeply
etc...

试图修复

我安装了最新版本的 XCode,但是,发布说明指出,在前一个修复程序中提到的文件,从 Jonathan 在这里,不再可用。

open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

详情请点击这里 Https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes.


对我有效的解决方案。

在此注释中使用详细信息,https://github.com/SOHU-Co/kafka-node/issues/881#issuecomment-396197724

我发现 brew doctor报告我有未使用的包括在我的 /usr/local/文件夹。

因此,为了解决这个问题,我使用了用户 有多疯狂提供的命令来查找未使用的 include 并将它们移动到一个临时文件夹。

重复一遍。

mkdir /tmp/includes
brew doctor 2>&1 | grep "/usr/local/include" | awk '{$1=$1;print}' | xargs -I _ mv _ /tmp/includes

在运行脚本之后,包含文件问题就消失了。 Nb: 我也评论了这个问题 给你

问题是 Xcode,特别是 Xcode 10.x,没有安装所有的东西,所以请确保命令行工具已经安装,在终端 shell 中键入以下内容:

Xcode-select —— install

还要启动 Xcode 并确保安装了所有必需的安装(如果没有安装,则会提示您) 由于 Xcode 10没有安装完整的 Mac OS SDK,所以在

/Library/Developer/CommandLineTools/Packages/macOS _ SDK _ headers _ for _ macOS _ 10.14. pkg/Library/Developer/CommandLineTools/Packages/macOS _ SDK _ headers _ for _ macOS _ 10.14. pkg

因为 Xcode 10没有安装此包。

我已经找到了很好的解决方案和解释在这个 GitHub 评论。 诀窍是:

make SDKROOT=`xcrun --show-sdk-path` MACOSX_DEPLOYMENT_TARGET=

完成了任务。

当你

  • 更新至 Mojave 10.14.6
  • 你的 /usr/include又被删除了
  • 在@Jonathan-lefflers 回答中提到的包裹已经不存在了 The file /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg does not exist.
  • Xcode 抱怨已经安装了命令行工具 Xcode-select —— install Xcode-select: error: 命令行工具已经安装,请使用“ Software Update”安装更新

然后,帮助我恢复提到的包,是删除整个 CommandLineTools文件夹 重新安装它。

注意: 以下内容可能是在 macos Catalina 10.15切换/普遍可用之前的高度上下文关联和时间限制。 我写于2019年10月1日

我相信,正是这些特定的情况导致了我的构建问题。它们可能不适用于大多数其他情况。

背景:

  • Macos 10.14.6 Mojave,Xcode 11.0,就在 Macos Catalina 10点15分启动之前。新购买的 Macbook Pro。

  • 基本上,这是一个从源代码编译的 Python 包。

  • 我已经在这里给出的答案中进行了一些建议的调整。

我的错误是:

pip install psycopg2
Collecting psycopg2
Using cached https://files.pythonhosted.org/packages/5c/1c/6997288da181277a0c29bc39a5f9143ff20b8c99f2a7d059cfb55163e165/psycopg2-2.8.3.tar.gz
Installing collected packages: psycopg2
Running setup.py install for psycopg2 ... error
ERROR: Command errored out with exit status 1:
command: xxxx/venv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-install-z0qca56g/psycopg2/setup.py'"'"'; __file__='"'"'/private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-install-z0qca56g/psycopg2/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/bk/_1cwm6dj3h1c0ptrhvr2v7dc0000gs/T/pip-record-ef126d8d/install-record.txt --single-version-externally-managed --compile --install-headers xxx/venv/include/site/python3.6/psycopg2




...
/usr/bin/clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -pipe -Os -isysroot/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk -DPSYCOPG_VERSION=2.8.3 (dt dec pq3 ext lo64) -DPG_VERSION_NUM=90615 -DHAVE_LO64=1 -I/Users/jluc/kds2/py2/venv/include -I/opt/local/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m -I. -I/opt/local/include/postgresql96 -I/opt/local/include/postgresql96/server -c psycopg/psycopgmodule.c -o build/temp.macosx-10.14-x86_64-3.6/psycopg/psycopgmodule.o


clang: warning: no such sysroot directory:
'/Applications/Xcode.app/Contents/Developer/Platforms
❌👇the real error👇❌
/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk' [-Wmissing-sysroot]
In file included from psycopg/psycopgmodule.c:27:
In file included from ./psycopg/psycopg.h:34:
/opt/local/Library/Frameworks/Python.framework/Versions/3.6/include/python3.6m/Python.h:25:10: fatal error: 'stdio.h' file not found
❌👆 what I thought was the error 👆❌
#include <stdio.h>
^~~~~~~~~
1 error generated.


It appears you are missing some prerequisite to build the package




我到目前为止所做的,没有修复任何东西:

  • xcode-select --install
  • 安装了 xcode
  • open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg

Stdio.h 还是同样的错误。

它存在于许多地方:

(venv) jluc@bemyerp$ mdfind -name stdio.h
/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/sys/stdio.h
/usr/include/_stdio.h
/usr/include/secure/_stdio.h
/usr/include/stdio.h  ✅ 👈 I believe this is the one that's usually missing.
but I have it.
/usr/include/sys/stdio.h
/usr/include/xlocale/_stdio.h

那么,让我们来看看 clang抱怨的第一个目录,看看:

(venv) jluc@gotchas$ cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs
(venv) jluc@SDKs$ ls -l
total 0
drwxr-xr-x  8 root  wheel  256 Aug 29 23:47 MacOSX.sdk
drwxr-xr-x  4 root  wheel  128 Aug 29 23:47 DriverKit19.0.sdk
drwxr-xr-x  6 root  wheel  192 Sep 11 04:47 ..
lrwxr-xr-x  1 root  wheel   10 Oct  1 13:28 MacOSX10.15.sdk -> MacOSX.sdk  👈
drwxr-xr-x  5 root  wheel  160 Oct  1 13:34 .

哈,我们有一个 MacOSX10.15. sdk的符号链接,但是没有 MacOSX10.14. sdk的符号链接。下面是我的第一个 clang错误:

clang: warning: no such sysroot directory: '/Applications/Xcode.app/.../Developer/SDKs/MacOSX10.14.sdk' [-Wmissing-sysroot]

我的猜测是苹果抢在他们的 xcode 配置上,并且已经认为他们在 Catalina 上。因为它是一个新的 Mac,旧的配置为10.14没有到位。

解决办法:

让我们用与10.15相同的方法来对10.14进行 symlink:

ln -s MacOSX.sdk/ MacOSX10.14.sdk

顺便说一句,如果我去那个 sdk 目录,我会发现:

...
./usr/include/sys/stdio.h
./usr/include/stdio.h
....

结果:

pip install psycopg2成功了。

注意: 实际的 pip install 命令没有引用 MacOSX10.14. sdk,这是后来才提到的,可能是由于 Python 安装机制检查了操作系统版本。

在我设法在 Mac OS Catalina 上修复这个问题之后,我的 /usr/local/include仍然缺少依赖性

我手动下载了依赖关系 从废物并将其放置在 /usr/local/include

@ JL 佩雷特是对的!

如果你是 macos 10.14.6 Mojave,Xcode 11.0 +

那么

Cd/Applications/Xcode.app/content/Developer/Platforms/MacOSX.Platform/Developer/SDK

Sudo ln-s MacOSX.sdk/MacOSX10.14. sdk

在迁移之后,我在 Golang (使用 Goland 进行调试)上遇到了同样的问题。唯一有帮助的(荒谬的)事情是重命名以下文件夹:

sudo mv /usr/local/include /usr/local/old_include

显然,它与自制安装的旧文件有关,现在已经坏了。

我几乎尝试了所有发布的解决方案,但没有一个对我有效。我使用 Mojave OS (10.14.6)和最终对我有效的方法(在删除和重新安装 Xcode、 CLT 和 SDK 头之后) :

  1. https://cran.r-project.org/bin/macosx/tools/安装 Clang v8
  2. 修改 ~/. R/Makevars 文件中的以下代码行
CC=/usr/local/opt/llvm/bin/clang -fopenmp
CXX=/usr/local/opt/llvm/bin/clang++

CC=/usr/local/clang8/bin/clang -fopenmp
CXX=/usr/local/clang8/bin/clang++

现在,依赖于 C 编译器的 R 包成功安装

ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.sdk'也许能帮你,它解决了我的问题。

在 Big Sur 11.5.2和 XCode 12.5.1上,它可能会有所帮助:

sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX11.1.sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk

CMake 告诉我,/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX11.1.sdk并不存在,于是我决定做一个符号链接。

另外,完全删除 CommandLineTools 目录、运行安装、预先编写 brew upgrade等等之前都没有帮助。