【发布时间】:2016-10-25 17:18:24
【问题描述】:
我有一个 iOS 项目可以很好地为模拟器构建,但在为通用设备构建或尝试通过 Xcode 在真实设备上运行时出现编译器错误。注意:实际的编译器错误,而不是链接器或部署错误。这些错误与 typedef 中的不匹配类型有关 - 好像它包含来自不同 SDK 的标头,或者具有不同的预处理器定义。
我的问题是 - 当我在 Xcode UI 中更改目标设备时会更改哪些编译器设置,我在哪里可以查看差异?当我查看项目设置并更改目标设备时,我看不到任何差异 - 特别是部署目标版本和 SDK 版本似乎没有变化。
该项目用于在 Xcode 7 下使用任何这些目标设备构建良好,但在 Xcode 8 下则不行。我怀疑这取决于 Xcode 附带的 SDK 版本。但要使其与某些目标设备而不是其他目标设备一起工作,它必须更改编译器设置。这应该很容易解决,只要我能看到它正在做出什么改变!
这是编译失败的行(在我的代码中):
typedef void* IOSurfaceRef;
这是错误信息:
error: typedef redefinition with different types ('void *' vs 'struct __IOSurface *')
请注意,我不希望帮助解决错误或提供有关它尝试做什么的建议 - 我知道这不好。我只想知道通过切换目标设备更改了哪些编译器设置。
【问题讨论】:
-
使用与错误相关的实际相关代码更新您的问题,并发布完整、准确、实际的错误。
-
谢谢,这是一个合理的要求。但是,我不想帮助修复错误 - 我在询问通过更改目标设备更改了哪些编译器设置,并且担心发布代码会引发关于代码为何执行 $HIGHLY_QUESTIONABLE_THING... 的问题
-
这是您的 typedef 还是在某些 Apple/3rd 方代码中?
-
它在我的代码中,它故意尝试(现在失败,对于某些但不是所有的目标设备)假装是 Apple 的 IOSurfaceRef 的别名。我不会试图为它辩护;)