未能发出预编译的标头

Posted

技术标签:

【中文标题】未能发出预编译的标头【英文标题】:failed to emit precompiled header 【发布时间】:2018-12-18 05:45:54 【问题描述】:

下午好

我正在尝试将 googles heatmaps 实施到我的基于地图的项目中。 在这个特定项目中,尝试构建时出现以下错误。

  failed to emit precompiled header '/Users/zachwilcox/Library/Developer/Xcode/DerivedData/OddJobs-gbnkfettubuccoheinzfovrqefub/Build/Intermediates.noindex/PrecompiledHeaders/OddJobs-Bridging-Header-swift_3WGH9SNI96Z2-clang_16JN3VASQHE4C.pch' for bridging header '/Users/zachwilcox/Desktop/OddJobs/OddJobs-Bridging-Header.h'

以及后续的说明

  'Google-Maps-ios-Utils/GMUHeatmapTileLayer.h' file not found

我不确定为什么会发生这种情况,因为我创建了一个全新的项目并进行了相同的实施,并且效果很好。但是当我在现有项目上运行它时,我得到了这两个错误。

我一直在研究这个问题一段时间,但我无法弄清楚问题是什么。我将桥接头设置为 .h 文件。

我已经尝试了个人试图给出答案的大多数步骤,但由于某种原因,它不适用于我的项目。先感谢您。在阅读 google 安装指南时,它说我只需要添加一个桥接头文件,即您在下图中看到的代码。在研究它时,我发现我还需要添加一个 .m 文件,但是当我这样做时我仍然会遇到同样的错误。同样,在我的虚拟项目中,我没有 .m 文件,只有您在下面看到的所有内容,所有内容都可以编译。

【问题讨论】:

当我注释掉 bridging-Header.h 它运行。所以这让我认为它不是搜索路径。 在不断研究这个问题后,我终于找到了答案。我看到这个网站上发布的答案有很多不同的变体,试图解决这个问题,但我所做的是遵循这个guide。我希望如果其他人有同样的问题,这可以帮助他们。 嗨,我遇到了同样的问题。尝试舔“指南”但“找不到页面”。你能帮忙再分享一下指南吗?谢谢 【参考方案1】:

如果您的项目包含 pod,那么您也必须为测试项目设置 pod 配置..

在文件检查器中选择根项目 -> 项目名称 -> 信息 -> 配置 为您的测试项目设置与您的主项目相同的配置

【讨论】:

【参考方案2】:

您有可能为所选方案关闭了“查找隐式依赖项”。如果您已更新/安装 pod 并尝试构建项目,如果未选中所选方案的此选项,则更有可能失败。@ 987654321@

来自 Apple 的文档:

Parallelize Build – 此选项允许 Xcode 通过构建不依赖于彼此的目标来加快总构建时间。对于具有许多可以轻松并行运行的较小依赖项的项目,这可以节省时间。

Find Implicit Dependencies – 这是一个非常强大的选项,它允许 Xcode 解析为成功构建方案的主要目标需要构建哪些目标。但是,这确实带有一些您必须注意的尖锐边缘。

情况:您将一个库链接到您的应用程序目标,并创建对该库目标的隐式依赖。

场景 1:“查找隐式依赖项”已启用。

结果:库将在构建应用程序目标之前构建。然后应用程序目标将链接到库并成功构建。

场景 2:“查找隐式依赖项”已禁用。

结果:在构建应用程序目标之前不会构建库。应用目标构建失败。

修复:为确保不会发生第二种情况,您必须将必要的目标添加到目标列表中并正确排序。

【讨论】:

以上是关于未能发出预编译的标头的主要内容,如果未能解决你的问题,请参考以下文章

预编译标头 IntelliSense 错误

理解问题:预编译的标头和包含用法

在 ac-docker win10 中编译时出现构建错误,要求重建已编译的标头,因为自预编译标头以来文件已被修改

如何使用 g++ 包含预编译的 .h.gch 标头

iOS 和 OS X 目标的通用预编译标头

使用 Qt Creator / qmake / MinGw 的预编译标头无法在调试版本中工作