49

我有一个使用 SocketRocket 具有依赖项(通过 CocoaPods 安装)的项目,并从 HeapAnalytics 导入了一个静态库。显然 HeapAnalytics 库已经使用了 SocketRocket。编译时我没有收到任何错误,但在运行时收到以下内容:

Class SRWebSocket is implemented in both [path] and [path].
One of the two will be used. Which one is undefined.

我不确定如何处理它,因为我见过的大多数解决方案都需要自己编译静态库更改类名等,而且我无权访问源代码。

有什么建议吗?

4

4 回答 4

61

我写了那个错误信息!•</p>

要么更改类名,要么不链接到所述库。

你的项目是如何配置的?是否有任何地方明确链接到 SR?或者它是链接两个已经包含 SR 的静态库的产物?

如果是前者,则停止直接链接到 SR 并继承已经使用它的库附带的版本(警告:确保它具有正确的版本)。

如果是后者,那么您将不得不修改其中一个库。

• 实际上,我修改了错误。它曾经暗示将使用其中一个或另一个。但这并不是真正发生的事情,而且不同平台的行为也不同。因此,它进行了更改,以便更准确地识别行为未定义。

于 2015-06-01T20:16:16.933 回答
4

在我的情况下,当我不必要地将源文件添加到我的主应用程序目标和我的测试目标时,会出现此错误:

选择了两个目标的目标成员资格

Target Membership从解决它中删除测试目标:

Target Membership 只选择了一个目标

于 2018-03-02T10:41:12.417 回答
4

概述:

该错误表明相同的符号/类被定义了两次。

解决方案:

  • 检查链接的框架,看看是否有任何重复。如果是这样,请删除重复项
  • 清理构建文件夹(Command + Shift + K)
  • 如果是模拟器,则重置模拟器并尝试
  • 如果是设备,请重新启动设备并尝试

我的经验:

我两次遇到同样的问题,一次是重复的框架,另一次重置模拟器有帮助。

于 2018-04-13T04:09:22.750 回答
3

我收到这个警告一个多月了,然后我终于尝试了这个,它对我有用:

  1. 重置模拟器(菜单:Hardware -> Erase all content and settings ...)
  2. 清理项目(Command + Shift + K)
  3. 清理构建文件夹(Command + Option + Shift + K)
  4. 再次在模拟器上运行代码
于 2018-07-19T13:19:41.563 回答