XCode:未知类型名称“SCREEN”,仅在构建发布时,在文件“unctrl.h”中

Posted

技术标签:

【中文标题】XCode:未知类型名称“SCREEN”,仅在构建发布时,在文件“unctrl.h”中【英文标题】:XCode: Unknown type name 'SCREEN', only when building for release, in file 'unctrl.h' 【发布时间】:2017-06-11 16:05:54 【问题描述】:

XCode 在这个文件中发现错误:

/opt/local/include/unctrl.h

消息:未知类型名称“屏幕”

/opt/local/include/ 必须在我的标题搜索路径中。在标题搜索路径中添加/usr/include/ 之前没有区别。 XCode 仍然坚持使用在/opt/local/include/ 中找到的版本。在/usr/include/ 下找到的版本没有触发错误的行,但XCode 不愿意使用该版本。

XCode 版本:8.3.3

为 macOS 应用程序编译桥接头文件时发生错误。

“清洁产品”没有区别。

该错误仅在将macos部署目标设置为10.12时出现,并且仅在发布配置中出现。

部署目标 10.11 - 调试构建 - 没有错误 部署目标 10.11 - 发布版本 - 无错误 部署目标 10.12 - 调试构建 - 无错误 部署目标10.12 - 发布版本 - 错误

【问题讨论】:

我升级了 MacPorts,它为我解决了问题:sudo port selfupdate; sudo port upgrade outdated 【参考方案1】:

发生的情况是您得到混合的头文件,一些来自 MacPorts 安装,另一些来自系统,并且它们不兼容。它正在加载 ncurses.h 的 SDK.12 版本(在加载 unctrl.h 之后定义了 SCREEN),但加载了 unctrl.h 的 MacPorts 版本(需要定义 SCREEN)。

我最终通过将 MacPorts 包含目录指定为系统包含目录解决了这个问题,因此通过指定包含搜索路径,它将用于 包含以及“”包含:

-cxx-isystem/opt/local/include

而不是

-I/opt/local/include

【讨论】:

另外,我必须在 Xcode 构建设置中将“启用模块”设置为“否”。 我通过完全删除 macports 并改用自制软件解决了这个问题。【参考方案2】:

我发现了。问题是我有几个带有框架的子项目,而这些子项目的部署目标都小于 macOS 10.12。

但是,当将主项目的部署目标设置为 10.11 时,子项目仍然会有混合部署目标,因为其中一些项目的部署目标是 10.10。由于某种原因,这与主项目的部署目标设置为 10.11 无关,只有当主项目的部署目标设置为 10.12 时。

无论什么原因,将所有子项目和主项目的部署目标设置为 10.12 解决了问题。

【讨论】:

以上是关于XCode:未知类型名称“SCREEN”,仅在构建发布时,在文件“unctrl.h”中的主要内容,如果未能解决你的问题,请参考以下文章

Xcode 5.1 - iOS 7.1 错误

未知类型名称'CGVector';您指的是 'CIVector' 吗?

XCode 6.0.1 - xmlParseEntityRef:Launch Screen.xib 上没有名称

RNAppAuth,iOS 构建失败,未知类型名称“命名空间”,react-native-app-auth

Swift - 导入 Objective-C 给出“未知类型名称”

React Native 0.60 升级:未知类型名称“MutexType”