gpt4 book ai didi

gcc - 如何处理 OS X Yosemite Core 头文件中的非 gcc 兼容代码

转载 作者:行者123 更新时间:2023-12-04 16:52:33 24 4
gpt4 key购买 nike

我维护了一个需要在 Linux、Windows 和 OS X 上运行的混合 C 和 C++ 命令行程序。我最近升级到 Yosemite 并且我的 OS X 构建现在失败了。错误是:

/usr/include/dispatch/object.h:143:15: error: expected identifier or '(' before '^' token

Other folks have run into this bug .

失败的代码行是一个使用“^”的 typedef,它是一个 non-standard extension providing support for closures .

潜在的问题似乎是一些 Apple 标准头文件开始需要 Clang 特定的扩展。不幸的是,我们的程序有一组非常深的依赖项,其中一些不能在 Clang 下编译。我们一直在使用通过 MacPorts 安装的 GCC 编译器。我现在有一个解决方法:更改 object.h 中的行 header 与 GCC 兼容。但是,破解 /usr/include 下的包含文件对我来说听起来像是自找麻烦。

任何 OS X/Clang 专家都可以提出更可持续的方法来解决这个问题吗?这是否会限制 GCC 在 OS X 上的 future 用途?

最佳答案

仅对于 future 的访问者,以下内容应该可以使大多数标题与最新的 GCC 版本一起使用:

dispatch/object.h改变
typedef void (^dispatch_block_t)(void);

#ifdef __clang__
typedef void (^dispatch_block_t)(void);
#else
typedef void* dispatch_block_t;
#endif

并在 Availability.h改变
#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED)

#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && defined(__clang__)

关于gcc - 如何处理 OS X Yosemite Core 头文件中的非 gcc 兼容代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27976312/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com