升级到 Mojave 后无法在 Mac 上编译 C 程序

2023-12-29

我在终端上使用 gcc 命令来编译 C 程序,但突然间,在更新我的 Mac 操作系统(macOS 10.14 Mojave 和 XCode 10.0)后,我开始收到以下消息:

test.c:8:10: fatal error: stdio.h: No such file or directory
#include <stdio.h>
         ^~~~~~~~~
compilation terminated.

我已经安装了 gcc,因为我可以在中找到它/usr/local/bin那里确实有一个海湾合作委员会。我尝试在我的另一台 iMac 上运行相同的文件,并且没有任何问题。

我尝试跑步xcode-select --install而且它已经安装了,因此它没有解决我现在遇到的问题。我猜路径很混乱,因为它似乎找不到gcc在我开始从其他资源复制并粘贴一些命令来解决此问题之后。

希望对此有所帮助。


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)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

升级到 Mojave 后无法在 Mac 上编译 C 程序 的相关文章

  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同
  • strlen() 编译时优化

    前几天我发现你可以找到编译时strlen使用这样的东西 template
  • Boost ASIO 串行写入十六进制值

    我正在使用 ubuntu 通过串行端口与设备进行通信 所有消息都必须是十六进制值 我已经在 Windows 环境中使用白蚁测试了通信设置 并得到了我期望的响应 但在使用 Boost asio 时我无法得到任何响应 以下是我设置串口的方法 b
  • 在 Mono 中反序列化 JSON 数据

    使用 Monodroid 时 是否有一种简单的方法可以将简单的 JSON 字符串反序列化为 NET 对象 System Json 只提供序列化 不提供反序列化 我尝试过的各种第三方库都会导致 Mono Monodroid 出现问题 谢谢 f
  • 如何在 C# 中将 Json 转换为对象

    我想将 Json 转换为 C 中的对象 这里的 Json 是 值 e920ce0f e3f5 4c6f 8e3d d2fbc51990e4 如何使用 Object 问题看似愚蠢 但其实并不那么愚蠢 我没有简单的 Json 我有 IEnume
  • C# 中一次性对象克隆会导致内存泄漏吗?

    检查这个代码 class someclass IDisposable private Bitmap imageObject public void ImageCrop int X int Y int W int H imageObject
  • 如何修复错误:“检测到无法访问的代码”

    我有以下代码 private string GetAnswer private int CountLeapYears DateTime startDate return count String answer GetAnswer Respo
  • 混合模型优先和代码优先

    我们使用模型优先方法创建了一个 Web 应用程序 一名新开发人员进入该项目 并使用代码优先方法 使用数据库文件 创建了一个新的自定义模型 这 这是代码第一个数据库上下文 namespace WVITDB DAL public class D
  • 为什么这个 makefile 在“make clean”上执行目标

    这是我当前的 makefile CXX g CXXFLAGS Wall O3 LDFLAGS TARGET testcpp SRCS main cpp object cpp foo cpp OBJS SRCS cpp o DEPS SRCS
  • 条件类型定义

    如果我有一小段这样的代码 template
  • 如何在 Javascript 中连接 C# ActiveX 事件处理程序

    我尝试使用几个代码片段将 ActiveX 对象与 Javascript 事件处理程序挂钩 我无法确定为什么事件处理程序没有被调用 带有项目的 Github 存储库 https github com JesseKPhillips Csharp
  • 读取依赖步行者输出

    I am having some problems using one of the Dlls in my application and I ran dependency walker on it i am not sure how to
  • 以编程方式创建 Blob 存储容器

    我有一个要求 即在创建公司时 在我的 storageaccount 中创建关联的 blob 存储容器 并将容器名称设置为传入的字符串变量 我已尝试以下操作 public void AddCompanyStorage string subDo
  • 如何在C#中控制datagridview光标移动

    我希望 datagridview 光标向右移动到下一列 而不是在向单元格输入数据后移动到下一行 我试图通过 dataGridView1 KeyDown 事件捕获键来控制光标 但这并不能阻止光标在将数据输入到单元格后移动到下一行 提前感谢你的
  • 在 C# 的 WebAPI 中的 ApiController 上使用“传输编码:分块”提供数据

    我需要服务分块传输使用编码数据API控制器 因为我无权访问HttpContext or the Http请求 我有点不知道在哪里写入响应以及在哪里刷新它 设置如下 public class MyController ApiControlle
  • 如何高效计算连续数的数字积?

    我正在尝试计算数字序列中每个数字的数字乘积 例如 21 22 23 98 99 将会 2 4 6 72 81 为了降低复杂性 我只会考虑 连续的数字 http simple wikipedia org wiki Consecutive in
  • 如何获取带有某个属性注释的所有属性?

    我刚刚从 Roslyn 开始 我想找到所有用属性名称 OneToOne 注释的属性 我启动了 SyntaxVisualizer 并能够获取对该节点的引用 但我想知道是否有更简单的方法来实现此目的 这就是我所拥有的 var prop docu
  • winform c# 中的弹出窗口

    我正在开发一个需要弹出窗口的项目 但问题是我还希望能够通过表单设计器在此弹出窗口中添加文本框等 所以基本上我有一个按钮 当您单击它时 它将打开我在表单设计器中设计的另一个窗口 我一直在谷歌搜索 但还没有找到我需要的东西 所以我希望你们能帮助
  • 声明一个负长度的数组

    当创建负长度数组时 C 中会发生什么 例如 int n 35 int testArray n for int i 0 i lt 10 i testArray i i 1 这段代码将编译 并且启用 Wall 时不会出现警告 并且似乎您可以分配
  • 如何在 ASP.NET Core 中注入泛型的依赖关系

    我有以下存储库类 public class TestRepository Repository

随机推荐