我在终端上使用gcc命令编译C程序,但是突然,在更新了Mac的操作系统(Mac OS 10.14mojave和xcode10.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
。希望能帮上忙。
最佳答案
TL;博士
确保已下载最新的“命令行工具”包,并从终端(命令行)运行此包:
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
有关Catalina的一些信息,请参见Can't compile a C program on a Mac after upgrading to Catalina 10.15。
从相当广泛的评论中提取一个半连贯的答案…
序言
通常,
xcode-select --install
是正确的解决方案,但这次似乎没有帮助。你试过运行主Xcode图形用户界面吗?它可能会为你安装一些额外的软件并清理。我是在安装了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
能够编译好。头(_stdio.h
,带前导下划线)在我以前的/usr/include
中;现在丢失了(因此我在GCC 8.2.0中遇到了问题)。我运行了xcode-select --install
,它说“xcode-select: note: install requested for command line developer tools
”,然后运行了一个GUI安装程序,它向我展示了一个我同意的许可证,它下载并安装了命令行工具——或者它声称的那样。然后我运行Xcode GUI(command space,Xcode,return),它说需要安装更多的软件,但仍然没有。但是我可以用
/usr/include
和/usr/bin/clang
进行编译,而且/usr/bin/gcc
选项表明它们正在使用InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
工作溶液
然后Maxxxnoted:
我找到办法了。如果我们使用的是Xcode 10,您会注意到,如果您导航到Finder中的
-v
,您将不再看到名为“include”的文件夹,这就是为什么终端会抱怨“include”文件夹中缺少头文件的原因。在Xcode 10.0 Release Notes中,它显示有一个包:/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
您应该安装该软件包以安装
/usr
文件夹。那你该走了。当所有其他操作失败时,请阅读手册,或者在本例中阅读发行说明。当我发现苹果想要抛弃他们的Unix传统时,我并不感到惊讶,但我很失望。如果他们小心的话,他们会把我赶走的。谢谢你提供的信息。
在命令行中使用下面的命令安装了包之后,我再次安装了
/usr/include
,我的GCC 8.2.0再次工作。open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
下载命令行工具
正如Vesal在一篇有价值的comment文章中指出的,您需要在Mojave 10.14上下载xcode10.1的命令行工具包,您可以从以下站点下载:
https://developer.apple.com/download/more/
您需要使用苹果ID登录才能获得下载。下载完成后,安装命令行工具包。然后按照“工作解决方案”一节中的说明安装头文件。
这对我的莫哈韦10.14.1有效。我以前一定下载过这个,但我在回答这个问题时忘了。
升级至Mojave 10.14.4和Xcode 10.2
大约在2019年5月17日,我更新了Mojave 10.14.4,Xcode 10.2命令行工具也升级了(或Xcode 10.1命令行工具升级到10.2)。上面显示的
/usr/include
命令修复了丢失的头。将主Xcode升级到10.2,然后重新安装命令行工具和头文件包,可能还会有一些冒险。升级至Xcode 10.3(用于Mojave 10.14.6)
在2019年7月22日,我通过应用商店得到通知,Xcode 10.3的升级是可用的,它包括iOS 12.4、tvOS 12.4、watchOS 5.3和macOS Mojave 10.14.6的SDK。我把它安装在我的10.14.5机器上,运行它,并按照它的建议安装了额外的组件,它似乎保持了
open
的完整性。同一天晚些时候,我发现macOS Mojave 10.14.6也可用(系统首选项⟶软件更新),还有一个命令行实用程序包IIRC(它是自动下载和安装的)。安装o/s更新再一次清除了
/usr/include
,但应答顶部的/usr/include
命令再次恢复了它。我在open
命令文件上的日期是2019-07-15。升级至XCode 11.0(用于Catalina 10.15)
XCode 11.0的升级(包括iOS 13、tvOS 13、watchOS 6和macOS Catalina 10.15的Swift 5.1和SDK)于2019年9月21日发布。我收到了“可用更新”的通知,并通过AppStore应用程序(更新选项卡)将其下载并安装到运行macOS Mojave 10.14.6的计算机上,没有问题,也不必使用
open
。安装之后(在运行应用程序之前),我立即尝试重新编译,被告知:同意Xcode/iOS许可证需要管理员权限,请运行“sudo xcodebuild-license”,然后重试此命令。
运行这个(
/usr/include
)允许我运行编译器。从那时起,我运行应用程序来安装它需要的额外组件;仍然没有问题。当我升级到Catalina的时候会发生什么事情还有待观察——但是我的macOS Mojave 10.14.6机器目前都还可以(2019-09-24)。
关于c - 升级到Mojave后,无法在Mac上编译C程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52935387/