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

191

我之前一直使用终端上的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,这是在我从其他资源中复制和粘贴一些命令来解决此问题后出现的。

希望能得到帮助。


7
您可以使用命令 echo "#include <a.h>" | gcc -v -x c - 来查看gcc的搜索路径。 - Matt
4
很多时候,“xcode-select --install”是正确的解决方案。您升级到了哪个操作系统? Mojave 10.14吗? 您安装了哪个版本的XCode? 10.0还是其他版本? - Jonathan Leffler
40
@JonathanLeffler,我找到了一种方法。如果我们使用的是XCode 10,您会发现在Finder中导航到/usr时,您将不再看到一个名为“include”的文件夹,这就是终端抱怨缺少包含在“include”文件夹中的头文件的原因。 在此版本说明中(https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes),您可以导航到/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg并运行该软件包以安装“include”文件夹。然后您就可以开始使用了。 - Maxxx
2
当一切都失败了,阅读手册!或者阅读发布说明。我并不惊讶于发现苹果想要抛弃Unix的遗产,但我感到失望。如果他们小心一点,他们可能会让我离开。谢谢你提供的信息;我稍后会试验一下(在睡几个小时之后)。 - Jonathan Leffler
17
安装了该软件包(在命令行中执行open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg),我再次拥有了 /usr/include,我的 GCC 8.2.0 也可以正常工作。感谢你的指引,找到它很不错。我建议你将答案写出来,因为可能会有其他人遇到相同的问题。 - Jonathan Leffler
显示剩余8条评论
16个回答

1
我遇到这个问题,什么都不起作用。我运行了xcode-select --install,并安装了/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg背景 由于我在新笔记本上遇到了应用商店的问题,我被迫从苹果网站下载Beta安装程序,以在应用商店之外安装Xcode。因此,我只安装了Xcode Beta解决方法 我认为这会使clang无法找到/Applications/Xcode.app/....SDKROOT目录,因为路径中没有Beta,或者Xcode Beta根本没有安装它(我不知道)。为了解决这个问题,我必须删除Xcode Beta并解决应用商店问题以安装发布版本。 tldr; 如果你使用的是Xcode Beta,请尝试清理所有内容并安装发布版本,然后再尝试其他人正在使用的解决方案。

1

我尝试了几乎所有发布的解决方案,但都没有起作用。我使用 Mojave 操作系统 (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包可以成功安装。

0

在迁移后,我在使用Goland进行调试时遇到了与Golang相同的问题。唯一(荒谬)的解决方法是重命名以下文件夹:

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

显然这与Homebrew安装的旧文件有关,现在已经损坏了。


0

0
正如Jonathan Leffler在上面指出的那样,macOS_SDK_headers.pkg文件在Xcode 10.1中已经不存在了。
对我有用的是执行brew upgrade,homebrew在后台更新gcc和/或其他内容解决了路径问题。

-1

@JL Peyret 是正确的!

如果你使用的是macOS 10.14.6 Mojave,Xcode 11.0+,

那么请执行以下操作:

cd /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs

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


这不应该是一条注释吗? - Franklin Yu

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