架构arm64的未定义符号:“_ OBJC_CLASS _ $ _ CMAltimeter”,在SKMaps中引用

时间:2015-04-28 09:44:06

标签: objective-c skmaps

最近我开始遇到这个我无法解决的错误。

我包含了我需要的所有框架,以便按照预期使用Skobbler地图,我再也没有遇到过这个问题(我在其他项目中使用过SKMaps)。

当我在寻找解决方案时,我注意到在2014年7月之前。我应该使用另一个用于64位系统的SDK,但是我看到现在它已经从Skobbler团队整理出来了。

有人能指出我究竟会出现什么问题吗?

注意:我在项目中手动拖放SKMaps.framework并选择“如果需要复制项目”

2 个答案:

答案 0 :(得分:6)

正如已经指出的那样,链接到CoreMotion框架。

为了将来解决这些问题,公式如下:

  1. Google CMAltimeter
  2. 最受欢迎的是CMAltimeter Class Reference(Apple网站)。
  3. 访问链接并注意它是Core Motion框架的一部分。
  4. CoreMotion.framework
  5. 中的链接
  6. 冲洗,重复直至所有此类错误消失。

答案 1 :(得分:4)

确保链接CoreMotion框架。

任何时候遇到链接问题,请先参考文档,看看它有哪些依赖项(在本例中为@import CoreMotion)。

如果你肯定并问自己:"但我确定这个符号在这个框架中!",就像你说SKMaps时的感觉一样。框架是链接的,它应该解决它,你可以检查缺少的符号(在这种情况下_OBJC_CLASS _ $ _ CMAltimeter)是否是该框架的一部分。

在终端上,您可以运行:

nm -g /path/to/SKMaps.framework/SKMaps

并检查符号是否存在。

为了更容易:

nm -g /path/to/SKMaps.framework/SKMaps | grep CMAltimeter

在这个例子中,你找不到它,因为它不是它的一部分。但如果你跑:

nm -g /path/to/CoreMotion.framework/CoreMotion | grep CMAltimeter

你会看到符号在那里。

如果它不存在,那是因为它不是这个库/框架/版本的一部分,你应该找到它的位置。 如果 IS 确实存在,则意味着它在编译期间没有被链接,并且将其添加到链接选项应解决它。