【问题标题】:Xcode 6 simulator build missing symbol for _clock$UNIX2003Xcode 6 模拟器为 _clock$UNIX2003 构建缺少符号
【发布时间】:2014-11-11 16:09:26
【问题描述】:

我正在为 iOS8 模拟器构建一个 Unity 项目。为模拟器移动 Xcode 6 GM 会导致此链接器错误。不确定我是否在构建中遗漏了某些内容或某些内容已损坏。有什么建议?完整的错误是:

架构 i386 的未定义符号: “_clock$UNIX2003”,引用自: libiPhone-lib.a(apihandle.o) 中的 _substanceHandleSwitchHard libiPhone-lib.a(mainrenderprocess.o) 中的 _mainRenderProcess ld:未找到架构 i386 的符号

使用代码 1 退出

【问题讨论】:

标签: xcode unity3d ios-simulator ios8 xcode6


【解决方案1】:

main.mm末尾添加以下内容。

#include <time.h>

extern "C"
{
clock_t
clock$UNIX2003(void)
{
    return clock();
}
}

【讨论】:

  • 绝对不要这样做。您将简单地掩盖一个更深层次的错误,因为您正在链接与 iOS 模拟器运行时不二进制兼容的目标文件。
  • 这可能是正确的,@JeremyHuddlestonSequoia,但这是 Unity 团队提供的当前解决方法(请参阅 forum.unity3d.com/threads/ios8-xcode6-compatibility.249533/…)。
  • 那么 Unity 开发人员需要齐心协力,为开发人员提供适合 iOS 模拟器的统一构建,而不是针对 OS X SDK 构建的。
  • 还要注意我在同一个线程中对他们的回复:forum.unity3d.com/threads/ios8-xcode6-compatibility.249533/…
  • 谢谢!它对我来说只是跳过编译错误 - 是的 Unity 3d
【解决方案2】:

clock$UNIX2003 是一个由 OS X 提供的符号,它不是 iOS 模拟器运行时的一部分。 iOS 总是符合标准,因此没有旧版(非 $UNIX2003)函数变体(提供这些变体是为了与针对旧版本 OS X SDK 构建的代码进行二进制兼容)。

您看到的问题的常见原因是您有一个针对 OS X SDK 构建的目标文件或存档 (libsomething.a),并试图将其链接到您的 iOS 模拟器可执行文件。这不受支持,因为这两个平台在该层不兼容。

您需要针对 iOS 模拟器 SDK 重建您的库(libsomething.a)。

【讨论】:

  • 我需要这个来测试 iOS8。最后它发布了,我能够在实际设备上进行测试。此问题仅限于模拟器。
  • @culzean 这不是模拟器的问题。这是您尝试链接到模拟器可执行文件的库的问题。 iOS 模拟器和 OS X 运行时不是二进制兼容的,看起来 Unity 开发人员错误地发布了一个与 OSX 兼容的 Unity 静态库以在 iOS 模拟器中使用。在过去,这只会导致运行时错误,但现在它导致编译时错误的情况比以前更多。希望这次更新实际上是针对 iOS 模拟器 SDK 构建的 Unity,而不是通过额外的 hack 来掩盖错误。
  • 请告诉我如何重建 libsomething.a
猜你喜欢
  • 1970-01-01
  • 2015-04-30
  • 2014-08-18
  • 2018-05-27
  • 2019-02-20
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多