升级到macOS Mojave后编译错误 | 致命错误:limits.h:没有这样的文件或目录。

18 浏览
0 Comments

升级到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了。

希望得到帮助。

admin 更改状态以发布 2023年5月21日
0
0 Comments

在尝试了这里和网上找到的所有答案之后,我仍然在一些缺少头文件的情况下得到了错误信息。尝试编译pyRFR时,我得到了关于找不到的错误,而这显然没有在其他头文件中安装在/usr/include中。然而,我找到了它在Mojave中的隐藏位置,并将它添加到了我的~/.bash_profile文件的末尾:

export CPATH=/Library/Developer/CommandLineTools/usr/include/c++/v1

这么做后,我现在可以编译pyRFR和其他C/C++程序。根据echo | gcc -E -Wp,-v -,gcc正在寻找这些头文件的旧位置(没有/c++/v1),但不是新位置,因此将其添加到CFLAGS中可以修复它。

0
0 Comments

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

可行的解决方法

然后Maxxx提出了一个解决方案:Maxxx noted:

我找到了一种方法。如果我们使用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)。

0