简而言之
确保您已下载最新的“命令行工具”包,并从终端(命令行)运行以下命令:
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
中。
I too已经升级到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。
我进行了一些比较,我的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
编译 - -v
选项表明他们正在使用
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
可行解决方案
然后Maxxx noted:
I've found a way. If we are using Xcode 10, you will notice that if you navigate to the /usr
in the Finder, you will not see a folder called 'include' any more, which is why the terminal complains of the absence of the header files which is contained inside the 'include' folder. In the Xcode 10.0 Release Notes, it says there is a package:
/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
and you should install that package to have the /usr/include
folder installed. Then you should be good to go.
当一切都失败了,阅读手册或者在这种情况下,阅读发布说明。我并不惊讶于苹果想要背弃他们的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登录才能下载。完成下载后,安装命令行工具包。然后按照“Working Solution”部分的说明安装头文件。
这在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文件夹。
同一天晚些时候,我发现macOS Mojave 10.14.6也可用了(系统偏好设置 ⟶ 软件更新),还有一个命令行工具包(如果我没记错的话,它是自动下载和安装的)。再次安装操作系统更新会清空/usr/include文件夹,但是答案顶部的open命令会重新安装它。我在open命令文件上的日期是2019年7月15日。
升级到XCode 11.0(适用于Catalina 10.15)
XCode 11.0 升级版于 2019-09-21 发布(包含 Swift 5.1 和 iOS 13、tvOS 13、watchOS 6 和 macOS Catalina 10.15 的 SDK)。我在 App Store 应用程序的“更新”选项卡中收到了“可用更新”的通知,并在运行 macOS Mojave 10.14.6 的机器上无需修改
/usr/include
,顺利下载并安装。在安装后立即尝试重新编译代码,但出现以下提示:
同意 Xcode/iOS 许可证需要管理员权限,请运行 “sudo xcodebuild -license” 然后重试此命令。
运行 sudo xcodebuild -license
后,编译器可以正常运行。此后,我运行应用程序以安装其所需的额外组件,仍然没有问题。目前我的 macOS Mojave 10.14.6 机器都正常运行(截至 2019-09-24),但升级到 Catalina 后情况尚未确定。
echo "#include <a.h>" | gcc -v -x c -
来查看gcc的搜索路径。 - Mattopen /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
),我再次拥有了/usr/include
,我的 GCC 8.2.0 也可以正常工作。感谢你的指引,找到它很不错。我建议你将答案写出来,因为可能会有其他人遇到相同的问题。 - Jonathan Leffler