如何处理OS X Yosemite核心头中的非CC兼容代码

2024-10-01 07:25:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我维护一个混合的C和C++命令行程序,需要在Linux、Windows和OS X上运行。我最近升级到优诗美地国家公园,我的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。在

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

任何一位OSX/Clang的专家能提出更可持续的方法来解决这个问题吗?这是否限制了GCC在osx上的未来用途?在


Tags: 方法命令行程序objectincludeoslinuxwindows
1条回答
网友
1楼 · 发布于 2024-10-01 07:25:05

对于将来的访问者来说,以下内容应该是最新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__)

相关问题 更多 >