首页 > 解决方案 > 升级到 Catalina 10.15 后无法在 Mac 上编译 C 程序

问题描述

之前有一个问题Can't compile C program on a Mac after upgrade to Mojave,这个问题的答案已经涵盖了大多数问题的变化。

现在——从 2019 年 10 月 7 日星期一开始——您可以升级到 macOS Catalina 10.15。再一次,在升级过程中,该/usr/include目录已被更新所吹走,即使在升级(从 Mojave 10.14.6)到 Catalina 之前安装了 XCode 11.0。因此,预期存在/usr/include目录的编译器不再工作。

Mojave 问题的主要推荐步骤 - 使用命令:

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

由于该目录/Library/Developer/CommandLineTools/Packages/不存在(因此还没有.pkg要打开的文件),因此无法一劳永逸。

有没有一种好的(官方)方法来创建和填充目录/usr/include

标签: cxcodemacosgccmacos-catalina

解决方案


在继续之前,请确保安装 xcode 命令行工具。

xcode-select --install

其实,你可以做到!实际上所有的 C 头文件都可以在这个文件夹中找到:

/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/

我们只需要为这个文件夹中的所有头文件创建符号链接:

/usr/local/include/

它对我有用!以下命令行将处理所有问题:

sudo ln -s /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/* /usr/local/include/

你会得到一些警告。一些标头已经存在,如下所示:

ln: /usr/local/include//tcl.h: File exists
ln: /usr/local/include//tclDecls.h: File exists
ln: /usr/local/include//tclPlatDecls.h: File exists
ln: /usr/local/include//tclTomMath.h: File exists
ln: /usr/local/include//tclTomMathDecls.h: File exists
ln: /usr/local/include//tk.h: File exists
ln: /usr/local/include//tkDecls.h: File exists
ln: /usr/local/include//tkPlatDecls.h: File exists

完全可以忽略。就这样。


推荐阅读