【问题标题】:Apple Mach -O Linker (Id) Error?Apple Mach -O 链接器(ID)错误?
【发布时间】:2017-07-09 22:42:15
【问题描述】:

我正在尝试构建这个从 Unity 构建的 xcode 工作区。当我在构建项目(链接)的最后阶段对项目进行了一些修改后,我得到了 Apple Mach -O Linker (Id) 错误。我无法打开错误选项卡以查看究竟是什么导致了错误。它所说的只是“链接器命令失败,退出代码为 1(使用 -v 查看调用)。还有两个 Apple Mach -O 链接器(Id)错误发生,但我不知道如何解决它们。

非常感谢任何帮助!

I can't expand these tabs.. this is all I get told This is the warning tab expanded, the two Apple Mach -O Linker (Id) warnings are the same

【问题讨论】:

  • “我无法打开错误选项卡来查看究竟是什么导致了错误。” >> 也许您可以尝试单击错误上方的右键,然后单击“在...中显示错误”之类的内容。如果您可以去那里,发布错误原因将很有帮助,以便了解链接器进程失败的原因。

标签: ios xcode unity3d linker cocoapods


【解决方案1】:

这个问题有不同的解决方案,其中之一是将启用Bitcode设置为No。 (我不知道为什么 default 它是 Yes

这个问题是个鬼问题。清除缓存,重启 Xcode,模拟器和 MAC,确保框架的正确链接,改变应用架构或者,有时什么都不做可以解决这个问题。

【讨论】:

  • 虽然与统一无关,但我遇到的错误信息是一样的,使用离子,我最终到了这里。对我来说,问题是由更新版本的科尔多瓦引起的。删除平台并使用降级版本的科尔多瓦再次添加它为我解决了这个问题。从 4.5.0 降级到 4.4.0。来源:github.com/ionic-team/ionic/issues/12849
  • 我的一个案例我遇到了同样的问题,通过降级 podfile 中的版本解决了,感谢分享
  • 只是补充一个发现,我相信我的问题的根本原因确实是升级到 4.5 版本:github.com/ionic-team/ionic/issues/12942#issuecomment-330893145
【解决方案2】:

此问题与“将二进制文件与库链接”有关。我重命名了目标,Pod 有两个 .framework 文件。因此,在删除过时的之后 - 问题得到了解决。

【讨论】:

  • 它对我有用。 Apple 编译器没有提供足够的信息。
【解决方案3】:

对我来说,情况是我删除了我的 pod 中不需要的依赖项之一,删除它后我收到了找不到相同依赖项的错误。所以我去从 Project >> Build Settings >> other Linker Flags 中删除它的条目,然后选择相同并删除它,如图所示图片下方。从链接器标志中删除后,我开始收到 Apple Mach -O Linker (Id) Error? 并且在尝试了一天之后,我意识到问题出在链接器标志内。在删除任何依赖项时,您必须删除另一行名称 -framework。您可以检查下图以获得清晰度。

所以我建议在从链接器标志中删除依赖项时密切关注它,请务必删除位于依赖项名称下方的关联 -framework 。就我而言,它是 ObjectMapper

【讨论】:

    【解决方案4】:

    如果你刚刚安装/卸载了一个 pod,你可能想看看这个。这对我有用:

    1. 首先确保您打开的是 .xcworkspace 文件而不是 .xcodeproj。但这很可能不是导致问题的原因。

    2. 删除最近刚安装的 pod。

    3. 在 Xcode 的项目目录中,打开 frameworks 文件夹,如果刚刚删除的 pod 仍然列为一个最近删除的 pod.framework,也将其从那里删除。这一步使我的项目最终编译成功。

    【讨论】:

    • 我必须使用吊舱怎么样?因为必须使用 OneSignal 来推送通知。你能帮我回答我的问题吗:stackoverflow.com/questions/46231264/…
    • @YuyangHe 如果你想使用最近删除的pod,重新安装它应该可以正常工作。
    【解决方案5】:

    另一个可能的原因是,如果您重命名了一个目标(我为什么要这样做?)并且您正在使用 pod。您最终会在主项目(不是 Pods 项目)的 Frameworks 文件夹中获得旧目标名称的一个版本,例如不再存在的 pods_oldtarget_framework

    只需删除旧版本(或将您的目标重新命名为原始版本并删除新版本),您应该一切顺利。

    【讨论】:

    【解决方案6】:

    对我来说,它缺少框架。尝试在 Google 上搜索您遇到的错误并找出它们属于哪些框架,然后将它们导入到构建阶段选项卡中。

    【讨论】:

      【解决方案7】:

      我遇到了同样的问题,通过

      解决了
      1. 安装最新的 CocoaPods
      2. 然后做pod setup

      【讨论】:

        【解决方案8】:

        对我来说,我遇到了问题,因为我使用的是 Xcode 9(测试版),然后我用另一个 Xcode 8.3 打开了同一个项目。要为我解决问题,只需清洁然后再次运行。

        【讨论】:

        • 构建时出现问题,因此清洁阶段已经正确完成。通过再次清洁,这不会改变任何事情
        【解决方案9】:

        如果在 mac 上为 ios 统一构建,请确保在构建设置中禁用 ios 平台的其他设置下的“金属编辑器支持”。

        【讨论】:

          【解决方案10】:

          我使用了 xcode 9.3 并且遇到了同样的错误。但是在 9.2 中它可以工作。 由于两个 xcode 生成的工件之间不兼容,可能会发生错误。引发错误的项目包括一个使用 xcode 9.2 构建的框架

          【讨论】:

            【解决方案11】:

            我将 libstdc++.tbd 添加到“BuildPhases >> Link Binary With Libraries”中。它对我有用。

            【讨论】:

              【解决方案12】:

              我是如何解决这个问题的:

              1. 我退出 Xcode,然后再次打开我的项目的 .xcworkspace。

              2. 当 Xcode 启动时...我看到警告...xcode 足够聪明并要求您切换到推荐的设置...点击它并让他进行更改。 (以积极的心态认真阅读警告,然后你会解决它)?

              【讨论】:

                猜你喜欢
                • 2011-10-09
                • 1970-01-01
                • 1970-01-01
                • 2012-02-26
                • 2011-12-06
                • 1970-01-01
                • 2014-04-06
                相关资源
                最近更新 更多