为啥 XCode 会抛出重复的符号错误?

Posted

技术标签:

【中文标题】为啥 XCode 会抛出重复的符号错误?【英文标题】:Why is XCode flaky about throwing duplicate symbol errors?为什么 XCode 会抛出重复的符号错误? 【发布时间】:2014-11-07 10:48:52 【问题描述】:

我有一个带有两个目标的 XCode 6 项目 - 一个 ios 8 应用程序和一个 iOS 8 扩展。我在两个目标之间共享一个常量文件。

我错误地在标头中声明了一个没有 extern 或 static 前缀的 const int,这导致了重复符号链接器错误。

该错误声明在项目的过去几次修订中都存在,并且从第一天起,常量头已包含在 MULTIPLE 文件中。

那么,为什么我只是在最近才开始收到错误 - 在我通过删除 Main.storyboard 对项目文件进行更改之后 - 并且仅在模拟器版本上也是如此?

注意:This has happened before

错误开始发生时间的进一步背景:

我从项目文件中删除了一个未使用的 Main.storyboard,然后立即开始收到此链接器错误。我知道这个错误现在不应该发生,因为相关常量已经使用了很长时间。

我还是修复了这个错误(通过将 const 声明为 extern 来代替),但现在开始出现一些其他错误。

我现在确信代码没有任何问题,只是 XCode 搞砸了。所以为了测试,我再次删除了 Main.storyboard,奇怪的错误(抱歉我没有记录)又回来了,对代码的更改为零。

为了进一步确认,我在同一台机器上检查了一个完整的先前提交(它工作完美,并且仍然有 Main.storyboard)。这一次,没有对代码、项目或 Main.storyboard 进行任何更改,我看到了同样的错误。

这证实了我的实际 pbxproj 和源文件没有任何问题,但是 XCode 缓存的数据中存在一些问题(某处)。

请注意,清除 DerivedData 文件夹也无济于事。

迂回点是,无论是突然抛出错误还是一直没有抛出错误,XCode 似乎都有错。但我正在检查是否有另一种合乎逻辑的解释来解释为什么 XCode 突然似乎“改变”了它的行为。

【问题讨论】:

这是一个关于“试图找到神秘的 XCode 缓存文件”(它的措辞不同)的替代问题,我已经删除了这个问题。想法是重新关注遇到的具体问题,并让观众对问题可能是什么产生更广泛的解释(我开始觉得我对除 DerivedData 之外还有其他缓存文件的解释是不必要的,但这是可能的解释感兴趣的“回答者”可以追求)。 为了扩展我的问题,我正在考虑的一件事是 XCode 可能将项目派生数据 - 构建过程可能取决于 - 在指定的“派生数据”以外的地方文件夹。找到这个神秘的文件夹并清除它可能会有所帮助。但这只是众多可能性之一。 “我在两个目标之间共享一个常量文件。”好吧,你的问题就在那里(假设这些目标在某个时候是同一个编译单元的一部分) 是的,我知道应该抛出错误 - 我的问题是为什么它没有在代码出现此问题的 DAYS 中抛出错误!请参阅->“那么,为什么我最近才开始收到错误-在我通过删除 Main.storyboard 对项目文件进行更改之后-而且仅在模拟器版本上也是如此?”有关问题/非问题的完整历史,请参阅“更多背景”部分。 您能否使用构建日志中的构建日志更新您的问题? 【参考方案1】:

只需检查您是否没有错误地将#import 编辑为.m 文件,而不是.h。这在过去对我造成了重复符号错误。

【讨论】:

以上是关于为啥 XCode 会抛出重复的符号错误?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这段代码会抛出 java.lang.***Error [重复]

Xcode中的重复符号错误

Xcode代码符号错误[重复]

更新可可豆荚后xcode重复符号架构错误

为啥mysql PDO不会在失败时抛出错误[重复]

为啥 BluetoothSetLocalServiceInfo 会抛出错误 1314?