TL; 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
可以编译。我的头_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
and 进行编译/usr/bin/gcc
-该-v
选项表明他们正在使用
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
工作方案
然后Maxxx 指出:
我找到了办法。如果我们使用的是Xcode 10,您会注意到,如果您/usr
在Finder中导航到,则不会再看到一个名为“ 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
下载命令行工具
正如Vesal在一份有价值的评论中指出的那样,您需要在Mojave 10.14上下载Xcode 10.1的命令行工具包,并且可以从以下位置下载:
您需要使用Apple ID登录才能下载。完成下载后,安装命令行工具软件包。然后按照“工作解决方案”部分中的说明安装标题。
这在Mojave 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-07-22,我通过App Store注意到可以升级到Xcode 10.3,并且其中包括适用于iOS 12.4,tvOS 12.4,watchOS 5.3和macOS Mojave 10.14.6的SDK。我将其安装在我的10.14.5机器中的一台上,然后运行它,并按照建议的方式安装了其他组件,并且它似乎/usr/include
完好无损。
当天晚些时候,我发现macOS Mojave 10.14.6也可用(系统偏好设置⟶软件更新),以及命令行实用程序软件包IIRC(已自动下载并安装)。重新安装了o / s更新确实删除了/usr/include
,但是open
答案顶部的命令再次将其恢复。我在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-09-21发布。我收到有关“可用更新”的通知,并通过App Store应用程序(“更新”选项卡)将其下载并安装到运行macOS Mojave 10.14.6的计算机上,而不会出现问题,也无需使用/usr/include
。安装后(运行应用程序本身之前),我立即尝试重新编译,并被告知:
同意Xcode / iOS许可证需要管理员权限,请运行“ sudo xcodebuild -license”,然后重试此命令。
运行(sudo xcodebuild -license
)使我可以运行编译器。从那时起,我运行该应用程序以安装所需的其他组件。还是没问题。当我升级到Catalina本身时会发生什么还有待观察-但是我的macOS Mojave 10.14.6机器目前都可以(2019-09-24)。
echo "#include <a.h>" | gcc -v -x c -