如何修复PCH错误?

时间:2013-03-17 16:28:01

标签: xcode clang precompiled-headers

当我尝试在Xcode中构建我的应用时,收到以下错误消息:

  

PCH文件由不同的分支((clang-425.0.24))构建而成   编译器((clang-425.0.27))

以前没有发生,但这是更新Xcode后的第一个版本。

其他应用有效,但不是特定应用。

如果我关闭"Precompile Prefix Header"设置,则可以正常工作。

如何修复此错误并仍然保持该设置?

22 个答案:

答案 0 :(得分:233)

这通常是一个缓存问题。通常可以通过按住选项键并选择产品>来解决此问题。清理构建文件夹......

答案 1 :(得分:37)

似乎产品>清洁构建文件夹... (按下Option键)适用于大多数人。请参阅@gaige选择的答案。

如果您与大多数人(包括我自己)不同,这仍然会给您带来麻烦XCode可能会将您的共享预编译头留在别处。对我来说,他们在一个类似的文件夹中:

/var/folders/<some random two characters>/<some random string>/C/com.apple.Xcode.502/SharedPrecompiledHeaders

我刚刚删除了整个SharedPrecompiledHeaders文件夹,这解决了我的问题。我不会在这里碰到太多其他的东西......

答案 2 :(得分:33)

删除项目的DerivedData文件夹。在Xcode首选项下查看 - &gt;查看保存位置的位置。

答案 3 :(得分:18)

转到Xcode首选项 - &gt;位置(如wcochran的回答中所述),只需重命名DerivedData文件夹即可。我只是将我的“DerivedData”改为“DerivedData2”,这迫使系统停止引用旧位置。当其他答案都没有起作用时,这就解决了我。见图:

enter image description here

答案 4 :(得分:12)

在Finder中从项目位置删除 mySvc.getUser(userId).then(function(user){ myCtrlInstance.user = user; }); Build文件夹对我有用。

答案 5 :(得分:11)

其他选项都不适用于我,这是修正它的原因:

我在/Users/(Yourname)/Library/Developer/Xcode/DerivedData/ModuleCache/删除了缓存文件夹(重命名也可以)。

尝试删除错误中提到的文件夹,如果您的错误如下所示:

PCH was compiled with module cache path '/Users/User/Library/Developer/Xcode/DerivedData/ModuleCache/75YIWZVTEAO8', but the path is currently '/Users/Stan/Library/Developer/Xcode/DerivedData/ModuleCache/75YIWZVTEAO8

答案 6 :(得分:10)

在您的ios项目目录中,转到 build 并删除 ModuleCache 文件夹。再次运行react-native run-ios,它应该按预期工作。 摘要 - rm -rf ios/build/ModuleCache

答案 7 :(得分:6)

升级Xcode后,我得到了多个项目。 Clean Build Folder和Clean没有效果 - @sedes回答和@josema.vitaminew的评论为我做了。但除非你使用一点狡猾,否则它可能会很棘手,所以这里有一步一步的快捷方式:

  1. 转到失败的构建日志
  2. 使用cmd -f“SharedPrecompiledHeaders”找到它(它将在一个巨大的可怕的复杂命令行中间)
  3. 拖动 - 选择文本“SharedPrecompiledHeaders”和所有字符BEFORE但不在它之后直到你到达该路径位的开头(仍然在大块文本的中间),例如对我来说:“/ var / folder 03/n71d4r551jv40j5nb8r9fjy80000gn/C/com.apple.Xcode.501/SharedPrecompiledHeaders
  4. 打开Finder
  5. 菜单:转到 - &gt;转到文件夹...
  6. 复制/粘贴所选路径
  7. 在“SharedPrecompiledHeaders”中删除所有子文件夹(这是安全的:它只是缓存数据)

    ...现在你的所有项目都将是“固定的”,但是必须首次重新构建自己的零缓存(所以只有NEXT构建才会比正常情况慢)。

答案 8 :(得分:5)

在我的情况下,我以这种方式摆脱了 SharedPrecompiledHeaders 下的所有文件,一切都开始正常工作:

sudo find /var/folders/ -type d -name "SharedPrecompiledHeaders" | xargs -n 1 -I dir sudo find dir -name \* -type f -delete

答案 9 :(得分:4)

特别是如果您从命令行构建或者您有构建脚本,则清理xcode目标是不够的。您已删除此文件夹。

预编译的标题位置可以在

中找到
Target -> build settings => "Build locations" -> Precompiled headers cached path

使用

删除此文件夹
#rm -fr SharedPrecompiledHeaders

enter image description here

答案 10 :(得分:3)

如果没有通过清洁解决。这是构建缓存问题 - 按住Option键并导航到Product&gt;清理构建文件夹。这解决了我的问题。

答案 11 :(得分:3)

在我的情况下,Xcode在我的项目主包中创建了DerivedData文件夹(/ Users / Path_to_your_project_source_code / YourProjectName / DerivedData)

我刚从源代码包中删除了这个文件夹,现在它正在运行。

要检查转到Xcode首选项 - &gt;位置并查看DerivedData是否已选择为&#34; Relative&#34;。见下图 enter image description here

答案 12 :(得分:2)

如果干净的构建不起作用,请在/var/folders/../SharedPrecompiledHeaders中查找PCH文件并删除对我有用的PCH文件。

答案 13 :(得分:2)

尝试使用Swift Package Manager构建项目时遇到此错误。

解决方案只是删除.build目录。

答案 14 :(得分:2)

你应该按住“shift + command + C”,然后你将建立成功

答案 15 :(得分:2)

您可以尝试清洁产品或构建文件夹:

SHIFT + COMMAND + K

OPTION + SHIFT + COMMAND + K

答案 16 :(得分:2)

清理和/或删除派生数据对我不起作用。什么工作是触摸/保存.pch文件(添加一个字符,然后删除它)以强制重建它。这就行了。

答案 17 :(得分:1)

我已经尝试清理项目并清理构建文件夹,但这两个文件都不起作用。

之后,我完全退出xCode,删除了标准位置的派生数据文件夹:〜/ Library / Developer / Xcode / DerivedData,再次启动xCode并构建项目。

这似乎解决了我的问题。

答案 18 :(得分:1)

<强>已更新

这对我很有用:

  • 关闭您的项目或工作区。
  • 在Finder中:⇧shift+⌘cmd+ G
  • 粘贴:〜/ Library / Developer / Xcode / DerivedData /
  • 删除ModuleCache文件夹并清空垃圾箱。
  • 打开你的项目。
  • 清洁:⇧shift+⌘cmd+ K
  • 构建:⌘cmd+ B

xCode 7.3.1
参考here

答案 19 :(得分:1)

对我而言,当我将项目复制到另一个位置时,总会发生这种情况。我这样做是为了将它推入回购或其他东西。

我必须删除旧位置和新位置的Build文件夹(rm -rf Build /)才能使其正常工作。这是有道理的,因为Build文件夹将包含与新位置无关的数据。

在这种情况下,清除派生数据或删除sharedPrecompiledHeaders文件夹并没有真正做到。

答案 20 :(得分:1)

如果要通过xcodebuild进行命令行构建,请查看是否使用了-derivedDataPath BUILD_DIR选项。如果是这样,您的ModuleCache.noindex目录将位于BUILD_DIR中,而不是普通的Xcode位置中。删除ModuleCache.noindex目录,一切就绪。

之所以遇到这种情况,是因为我正在构建一个React Native应用,而iOS客户端通常是通​​过命令行通过React Native工具集构建的。

答案 21 :(得分:0)

我刚刚删除了DerivedData,并为我工作。