我维护一个混合的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上的未来用途?在
对于将来的访问者来说,以下内容应该是最新GCC版本的标题:
在
dispatch/object.h
改变typedef void (^dispatch_block_t)(void);
到
在
Availability.h
变化中#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED)
到
#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && defined(__clang__)
相关问题 更多 >
编程相关推荐