升级到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  ^~~~~~~~~ compilation terminated. 

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

我尝试运行xcode-select --install并且它已经安装,因此它没有解决我现在遇到的问题。 我猜测路径搞砸了,因为在我开始复制并粘贴其他资源中的一些命令来解决此问题后,它似乎无法找到gcc

希望对此有所帮助。

从相当广泛的评论中提取半连贯的答案……

前言

通常, 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和system /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(命令空间,xcode,返回),它说它需要安装更多的软件,但仍然没有/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文件夹。 然后你应该好好去。

当所有其他方法都失败时,请阅读手册,或者在本例中阅读发行说明。 我发现Apple希望拒绝他们的Unix传统,我并不会感到非常惊讶,但我很失望。 如果他们小心,他们可能会把我赶走。 感谢您的信息。

在命令行中使用以下命令安装了软件包后,我再次使用/usr/include ,然后我的GCC 8.2.0再次运行。

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

下载命令行工具

正如Vesal在一篇有价值的评论中指出的那样,您需要在Mojave 10.14上下载XCode 10.1的命令行工具包,您可以从以下位置下载:

您需要使用Apple ID登录才能下载。 完成下载后,安装Command Line Utilities包。 然后按照“工作解决方案”一节中的说明安装标头。

这在Mojave 10.14.1上对我有用。 我之前一定已经下载了这个,但是当我回答这个问题时我已经忘记了。