【问题标题】:"Undefined symbols for architecture arm64" appearing after Unity FB SDK UpdateUnity FB SDK 更新后出现“架构 arm64 的未定义符号”
【发布时间】:2022-08-17 07:18:12
【问题描述】:
  • 统一版本:2020.3.25f1
  • XCode 版本:13.2.1
  • Unity FB SDK:从 11.+ 迁移到 14.0.0

由于 13.2 中引入的编辑器/IDE 相关问题而拒绝更新 Facebook Unity SDK 后,正在努力更新到 Unity Facebook SDK 版本 14.0.0。在解决了符合 FB 更新的标准问题(包括专门在 FB 设置中的客户端令牌并将 DLL 设置为正确的构建架构)之后,我能够毫无问题地构建 webgl 和 android,但遇到了iOS 构建失败。

Undefined symbols for architecture arm64:
  \"_OBJC_CLASS_$_ACAccountStore\", referenced from:
      objc-class-ref in Util.o
  \"_ACFacebookAppIdKey\", referenced from:
      _Util_getNativeFBPermissionStatus in Util.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

阅读各种其他问题,碰到类似的未定义的体系结构符号让我觉得我可能在我的链接器设置中遗漏了一些东西,或者可能遗漏了我需要参考的框架。最初我认为这是在归档过程中发生的事情,但是在尝试构建 xcode 项目时会显示相同的错误。 pod 文件构建成功并且没有问题地解决,因此正在构建 xcode 工作区。

编辑:添加更多信息,我已经完成了建议的 dll 导入设置解决方案。

  • 这里同样的问题。我有时想知道 Facebook 是否曾经测试过他们自己的产品,但我已经知道答案,因为它们显然不起作用。
  • 我完全同意,我觉得他们可能不一定会尝试将他们的 SDK 构建到各种配置的设备上。

标签: ios xcode facebook unity3d arm64


【解决方案1】:

这是通过以下方式解决的:https://github.com/facebook/facebook-sdk-for-unity/wiki/FAQ---Troubleshooting-Unity-SDK-14.0.0

您的问题是“问题 2:dll 配置错误”——为了完整起见,下面是完整的解决方案。我将在下面留下拼写错误和糟糕的语法,只是为了强调这些人是多么的草率。

“解决方案:

这表明 Unity 中的 dll 配置错误。当 Unity SDK 导入 Unity 时,不幸的是 Unity 将所有 dll 重新配置为“所有平台”,这在特定平台上构建时会导致问题。解决此问题的方法是重新配置 dll。您将在 Unity 中的 FacebookSDK -> Plugins 下找到它们,所有 dll 都位于它们的各种平台文件夹下,例如 Android / Canvas / Editor / iOS 等。单击它们,将出现一个检查器(附截图)。所附示例显示了 Android dll 的配置。取消选中所有平台(如果需要)并选择 Android。对其余部分执行相同操作:

Android.DLL 到 Android 平台 IOS Dll到iOS平台 Canavs 到 webgl"

编辑:如下文所述,如果您不是为 Windows(或任何其他平台)构建,只需删除这些文件夹。无论如何,如果您希望您的构建在移动设备上工作,您将不得不删除 Windows x86 文件夹。

【讨论】:

  • 您确定吗?我已经按照该链接并按照概述配置了 dll。并且 dll 配置错误的结果会导致大量未解析的符号,而不仅仅是我看到的 2 个。
  • 这立即为我解决了。我只是去了 Unity 中的每一个并检查了正确的框。如果您不制作 Windows 应用程序,您也可以删除整个 Windows 文件夹,这对我造成了一些构建问题,尽管我认为删除 x86 文件夹也可以。
【解决方案2】:

在从过去从事此项目的工程师那里获得一些信息后,设法发现丢失的符号与一些不再支持的旧 FB 代码有关,并且我们的应用程序不再使用它。因此,能够干净地删除旧代码并解决构建问题。事情似乎按预期进行。为了可见性,我们有一个内部类,它使用一些外部方法在我们的应用程序代码和与平台相关的本机代码之间架起一座桥梁。 iOS 有一个方法getNativeFBPermissionStatus,它是 Util.m 类的一部分。

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-23
    • 2021-07-25
    相关资源
    最近更新 更多