首页 >后端开发 >C++ >为什么我的 C 代码在升级到 Catalina 后无法使用 `` 标头进行编译?

为什么我的 C 代码在升级到 Catalina 后无法使用 `` 标头进行编译?

Patricia Arquette
Patricia Arquette原创
2024-11-15 10:15:02636浏览

Why is my C   code failing to compile with the `` header after upgrading to Catalina?

Catalina C:标头错误:未定义的“signbit”成员

简介

从 Mojave 升级到 Catalina 可能会在编译依赖于 的程序时引入问题。标头。这是由于 Catalina 中处理系统库的方式发生了变化。

问题陈述

升级后,尝试使用 编译代码标头会导致以下错误:

error: no member named 'signbit' in the global namespace
error: no member named 'fpclassify' in the global namespace
error: no member named 'isfinite' in the global namespace

原因

Catalina 会清除并保护 /usr/include 目录,该目录通常是 C 标头所在的位置。因此,构建系统可能无法找到必要的标头。

解决方案

要解决此问题,需要使用 -isysroot 编译器标志将构建系统指向正确的标头。以下是执行此操作的步骤:

  1. 验证 Xcode 是否是最新的。
  2. 使用 xcrun --show-sdk-path 确定系统 SDK 路径,然后相应地修改构建系统:

    • CMake: set(CMAKE_OSX_SYSROOT /sdk/path) 或 set(CMAKE_CXX_FLAGS "[...] -isysroot /sdk/path")
    • 其他编译器: 将 -isysroot /sdk/path 添加到编译器标志

结论

按照以下步骤操作应解决该问题并允许程序使用 标头在 Catalina 下编译成功。

以上是为什么我的 C 代码在升级到 Catalina 后无法使用 `` 标头进行编译?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn