TL;DR
确保您已下载最新的“命令行工具”包并从终端(命令行)运行它:
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
有关卡特琳娜的一些信息,请参阅升级到 Catalina 10.15 后无法在 Mac 上编译 C 程序 https://stackoverflow.com/questions/58278260/cant-compile-a-c-program-on-a-mac-after-upgrading-to-catalina-10-15/58278392#58278392.
Extracting a semi-coherent answer from rather extensive comments…
Preamble
常常,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的。一个标题(_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
工作溶液
Then Maxxx https://stackoverflow.com/users/7661005/maxxx noted https://stackoverflow.com/questions/52509602/cant-compile-c-program-on-a-mac-after-upgrade-to-mojave/52530212#comment91963866_52509602:
我已经找到办法了。如果我们使用 Xcode 10,您会注意到,如果您导航到/usr
在 Finder 中,您将不再看到名为“include”的文件夹,这就是终端抱怨缺少“include”文件夹中包含的头文件的原因。在里面Xcode 10.0 发行说明 https://developer.apple.com/documentation/xcode_release_notes/xcode_10_release_notes,它说有一个包:
/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
下载命令行工具
As Vesal https://stackoverflow.com/users/2504891/vesal指出了一个有价值的comment https://stackoverflow.com/questions/52509602/cant-compile-c-program-on-a-mac-after-upgrade-to-mojave/52530212?noredirect=1#comment93215344_52530212,您需要在 Mojave 10.14 上下载适用于 Xcode 10.1 的命令行工具包,您可以从以下位置执行此操作:
- https://developer.apple.com/download/more/ https://developer.apple.com/download/more/
您需要使用 Apple ID 登录才能下载。下载完成后,安装命令行工具包。然后按照“工作解决方案”部分中的描述安装标头。
这在 Mojave 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)。这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、watchOS 5.3 和 macOS Mojave 10.14.6 的 SDK。我在我的一台 10.14.5 机器上安装了它,然后运行它,并按照建议安装了额外的组件,它似乎已经离开/usr/include
intact.
同一天晚些时候,我发现 macOS Mojave 10.14.6 也可用(系统偏好设置 ⟶ 软件更新),以及命令行实用程序包 IIRC(它是自动下载并安装的)。安装操作系统更新后,再次清除了/usr/include
,但是open
答案顶部的命令再次恢复了它。我在文件上的日期open
命令是 2019-07-15。
升级到 XCode 11.0(适用于 Catalina 10.15)
XCode 11.0 的升级(“包括 Swift 5.1 和适用于 iOS 13、tvOS 13、watchOS 6 和 macOS Catalina 10.15 的 SDK”)于 2019 年 9 月 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)。