通常,更改结构的命名当然会更容易,但是由于它来自另一个库,因此这是我为您提供的解决方案。
事实证明,如果您允许您的 .pch 文件包含来自 iOS 7.1 > /usr/include 的任何头文件,那么它将引用(包含?)更多,包括导致项目问题的 grp.h。
例如,如果您的 .pch 文件包含以下内容:
#import <Availability.h>
那么grp.h会引起冲突。
如果您注释掉这一行(并且不包含“iOS 7.1 > usr/include”中的任何其他标题),那么您的项目将编译。
作为测试,您可以注释掉<Availability.h>
并添加#import <cpio.h>
,结果将是相同的(尽管 cpio.h 非常小并且不引用任何其他头文件)。
我不太擅长理解编译的内部结构,所以我无法解释为什么会发生这种情况,但我将问题追溯到这个文件:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.1.sdk/usr/include/module.map
它似乎将各种 Darwin 头文件组合在一起。
iOS 7.0 和 iOS 7.1 都有这个文件,而 iOS 6.0 没有(这可以解释为什么相同的代码可以在早期的 iOS 版本上工作)。
好消息是,尽管您需要从 *.pch 文件中删除 /usr/include 头文件,但您仍然可以将它们包含在您实际需要它们的文件中,并且不会破坏编译。这可能是因为尽管 grp.h 最终会包含在这些文件中,但它不会包含在您的 table.c 中