Cha*_*ant 5 gcc clang osx-yosemite
我维护一个混合的C和C++命令行程序,需要在Linux,Windows和OS X上运行.我最近升级到Yosemite,我的OS X版本现在失败了.错误是:
/usr/include/dispatch/object.h:143:15: error: expected identifier or '(' before '^' token
Run Code Online (Sandbox Code Playgroud)
失败的代码行是使用'^'的typedef,'^'是一个非标准扩展,提供对闭包的支持.
潜在的问题似乎是一些Apple标准头文件开始需要Clang特定扩展.不幸的是,我们的程序有一个非常深的依赖集,其中一些不会在Clang下编译.我们一直在使用通过MacPorts安装的GCC编译器.我现在有一个解决方法:将object.h标题中的行更改为GCC兼容.然而,在/usr/include声音中攻击包含文件就像惹麻烦一样.
任何OS X/Clang专家都能提出更可持续的方法来应对这个问题吗?这是否限制了GCC在OS X上的未来实用性?
Tho*_*mas 13
仅为未来的访问者,以下应该使大多数标题与最近的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
Run Code Online (Sandbox Code Playgroud)
并在Availability.h改变
#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED)
至
#elif defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && defined(__clang__)
| 归档时间: |
|
| 查看次数: |
1030 次 |
| 最近记录: |