架构 arm64 的未定义符号:“_OBJC_CLASS_$_CMAltimeter”,在 SKMaps 中引用

Undefined symbols for architecture arm64: "_OBJC_CLASS_$_CMAltimeter", referenced in SKMaps

最近我开始遇到无法修复的错误。

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

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

谁能告诉我这里到底有什么问题?

注意:我在我的项目中手动拖放SKMaps.framework并做了select"Copy items if needed"

确保您正在 link 使用 CoreMotion 框架。

任何时候遇到 linking 问题,请先参阅文档以查看它具有哪些依赖项(在本例中,@import CoreMotion)。

如果您确定并问问自己:"But I'm sure this symbol is in this framework!",就像您说SKMaps.framework被link编辑时的感觉一样应该解决它,您可以检查缺少的符号(_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

你会看到符号在那里。

如果它不存在,那是因为它不是此 library/framework/version 的一部分,您应该找到它所在的位置。 如果IS确实存在,说明它在编译时没有被link编辑,将其添加到link选项应该可以解决。

如前所述,link 使用 CoreMotion 框架。

以后要解决这些问题,公式是这样的:

  1. Google CMAltimeter.
  2. 点击率最高的是 CMAltimeter Class Reference(Apple 网站)。
  3. 访问 link 并注意它是 Core Motion 框架的一部分。
  4. Link 在 CoreMotion.framework.
  5. 冲洗,重复直到所有此类错误消失。