【问题标题】:Xcode - linking error _OBJC_CLASS_$_"className" after replacing class filesXcode - 替换类文件后链接错误_OBJC_CLASS_$_“className”
【发布时间】:2012-04-09 10:35:43
【问题描述】:

简介

在我正在进行的当前项目中,我们正在使用 ChartBoost SDK 来制作流行广告。我们已经使用这个 SDK 一段时间了,没有任何问题。这是一个非常简单的库,基本上只有一个名为“ChartBoost.h”的头文件和一个“libChartBoost.a”文件。

现在我们刚刚使用新版本更新了 SDK 文件。我在这里所做的只是通过“移动到垃圾箱”从项目中删除旧的 SDK 文件。我之后所做的只是将新的 SDK 文件移动到项目中,并添加它们的引用。

问题

在执行此操作并编译项目后,我突然收到 2 个链接错误。这是它的截图:

我已经尝试了几乎所有我能想到的尝试并消除错误。我已经清理了项目和项目文件夹,我也尝试通过管理器窗口删除项目的派生数据。

我很确定这与链接器试图使用旧文件的引用有关吗?但我不确定如何才能删除那些现在无效的引用。

这里有人知道如何解决这个问题吗?

[编辑] 将 ChartBoost.a 链接到二进制文件

所以我尝试通过“构建阶段”选项卡将 ChartBoost.a 文件链接到二进制文件。虽然揭示了 8 个新错误,但这确实消除了两个原始错误,如下面的屏幕截图所示:

不幸的是,我不太确定这些链接错误应该是什么意思:(有人有什么想法吗?

【问题讨论】:

  • 看起来您缺少一些库或使用 ARC 和库使用保留等。
  • 顺便说一句:更好的升级方法是只替换 ChartBoost.h 和 libChartBoost.a 文件,无论它们当前在磁盘上的什么位置(即 Xcode 的文件引用指向的任何位置)。您无需更改任何其他内容。
  • 感谢 Kurt Revis 的提示 :)

标签: objective-c ios xcode linker linker-errors


【解决方案1】:

在您应用的目标中,查看“Build Phases”,在“Link Binary With Libraries”阶段。

它应该包括libChartBoost.a

如果没有,请按 + 按钮并选择 libChartBoost.a

我很确定这与链接器试图使用旧文件的引用有关吗?

没有。您从项目中删除了旧文件,其中包含“使用库链接二进制文件”构建阶段中的引用。当您将新文件添加到项目中时,您没有添加回该引用。

【讨论】:

  • 我已经用结果的详细信息和屏幕截图更新了原始问题。它确实摆脱了原来的两个问题,但发现了 8 个新问题
  • 看看有问题的类名,做一点研究。 SCNetworkReachabilityXXX 位于 iOS SystemConfiguration 框架中,因此请将其添加到您的链接库中。 SBJson3Parser 是您的 libChartBoost 正在使用的 JSON 解析器库。您在latest version of the ChartBoost SDKJSON3 文件夹中看到所有这些文件?将它们添加到您的项目中!
  • 好吧,添加 SystemConfiguration 网络可以解决 6 个错误。现在唯一剩下的问题是我再次收到原始错误,只是这次是“SBJson3Parser”,它显然在 libChartBoost.a 库中被引用。唯一的问题是 ChartBoost 库附带的 JSON3 文件夹本身没有任何要包含的库文件。顺便说一句,我已将此文件夹作为项目的一部分。这很奇怪,因为当我们第一次实现 ChartBoost 时,我们不必搞乱这些库包含。
  • 其实你可以在屏幕截图的顶部看到错误,剩下的就是:“_OBJC_CLASS_$_SBJson3Parser”。我已将该文件夹及其所有文件作为项目的一部分包含在内。
  • 您在JSON3 中看到了所有这些.m 文件?确保它们处于目标的“编译源”构建阶段。至于为什么事情发生了变化:你为什么不问问 ChartBoost 的人?想必他们可以解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-18
  • 1970-01-01
  • 1970-01-01
  • 2021-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多