升级到macOS Mojave后编译错误 | 致命错误:limits.h:没有这样的文件或目录。
升级到macOS Mojave后编译错误 | 致命错误:limits.h:没有这样的文件或目录。
我曾经在终端上使用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
了。
希望得到帮助。
在尝试了这里和网上找到的所有答案之后,我仍然在一些缺少头文件的情况下得到了错误信息。尝试编译pyRFR时,我得到了关于找不到
export CPATH=/Library/Developer/CommandLineTools/usr/include/c++/v1
这么做后,我现在可以编译pyRFR和其他C/C++程序。根据echo | gcc -E -Wp,-v -
,gcc正在寻找这些头文件的旧位置(没有/c++/v1),但不是新位置,因此将其添加到CFLAGS中可以修复它。
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
和/usr/bin/gcc
进行编译 - -v
选项表明他们正在使用
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
可行的解决方法
我找到了一种方法。如果我们使用Xcode 10,你会发现如果你在Finder中导航到
/usr
,你将不再看到一个名为“include”的文件夹,这就是为什么终端抱怨缺少包含在“include”文件夹中的头文件。 在Xcode 10.0 Release Notes中,它称有一个包:/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的命令行工具包,网址为:
你需要用苹果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
的完好无损。
当天晚些时候,我发现macOS Mojave 10.14.6也可用了(系统偏好设置⟶软件更新),还有一个命令行实用程序包,我IRC(它被自动下载和安装)。安装操作系统更新又一次抹掉了/usr/include
,但是在答案的顶部使用open
命令又重新安装了它。我在open
命令文件上的日期是2019年7月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)。