苹果Mach-O链接器(Id)错误?

18
我试图构建这个从Unity构建的xcode工作区。在对项目进行少量修改后,当我到达构建项目的最后阶段(链接)时,我遇到了Apple Mach-O链接器(Id)错误。我无法打开错误选项卡以查看到底是什么导致了该错误。它只显示"链接器命令失败,退出代码为1(使用-v查看调用)"。还有两个Apple Mach-O链接器(Id)错误发生,但我不知道如何解决它们。
非常感谢任何帮助! 我无法展开这些选项卡.. 这就是我得到的所有信息 这是警告选项卡的展开视图,两个Apple Mach-O链接器(Id)警告是相同的

1
我无法打开错误选项卡以查看到底是什么导致了错误。也许您可以尝试在错误上点击右键,然后选择“在...中显示错误”之类的选项。如果您能够成功跳转到那里,这将有助于发布错误的原因,以便了解链接器过程失败的原因。 - mayo
12个回答

18

这个问题有不同的解决方案,其中之一是将启用位码设置为(我不知道为什么默认情况下是)。

输入图像描述

这个问题就像幽灵一样。清除缓存,重新启动Xcode、模拟器和MAC,确保框架的正确链接,更改应用程序的架构,或者有时什么都不做也可以解决这个问题。


2
虽然与Unity无关,但我遇到的错误消息是相同的,使用Ionic,最终导致我来到这里。对我来说,问题是由于Cordova的更新版本引起的。删除平台并再次添加它,使用降级版本的Cordova为我解决了问题。从4.5.0降级到4.4.0。来源:https://github.com/ionic-team/ionic/issues/12849 - rpbaltazar
我遇到了同样的问题,在podfile中降级版本解决了,感谢分享。 - roy
只是再添加一个发现,我相信我的问题的根本原因确实是升级到4.5版本:https://github.com/ionic-team/ionic/issues/12942#issuecomment-330893145 - rpbaltazar

7
这个问题与“链接二进制文件库”有关。我已经重命名了目标,且该Pods有两个.framework文件。因此,在删除过时的文件后,问题得到解决。 enter image description here

它对我有效。苹果编译器没有提供足够的信息。 - user2167877

5
对我来说,情况是这样的:我从我的Pods中删除了一个不必要的依赖项,但在删除它后,我出现了同样的依赖项找不到的错误。所以我去删除有关的项目条目 Project >> Build Settings >> other Linker Flags, 然后选择相应的内容,并按照下图所示删除。 从链接器标志中删除后,我开始收到 Apple Mach -O Linker(Id)Error? ,并经过一天的尝试后,我意识到问题出现在链接器标志里。删除任何依赖项时,您必须删除其他行名称 -framework。 您可以查看下面的图像以获得更清晰的理解。 Apple Mach -O Linker (Id) Error? 因此,我建议在从链接器标志中删除依赖项时请注意,确保同时删除相关的-framework ,该框架位于依赖项名称下方。 在我的情况下,它是 ObjectMapper

4
如果您刚刚安装/卸载了一个Pod,您可能想要查看这个。以下是对我有效的操作步骤:
  1. 首先确保打开的是 .xcworkspace 而不是 .xcodeproj 文件。但这可能不是引起问题的原因。

  2. 删除最近安装的那个Pod。

  3. 在Xcode项目目录下,打开frameworks文件夹,如果最近删除的那个Pod仍然列在那里并且以 recentlyremovedpod.framework 的形式出现,请从那里删除它。这一步是让我的项目最终编译成功的关键。


我必须使用pod吗?因为必须使用OneSignal来推送通知。你能帮我回答我的问题吗:https://stackoverflow.com/questions/46231264/ionic3-apple-mach-o-linker-id-error - Yuyang He
1
@YuyangHe 如果你想使用最近删除的 pod,重新安装它应该就可以正常工作了。 - Loup G

2

另一个可能的原因是,如果您重命名其中一个目标(我为什么要这样做?)并且使用了pods。您会在主项目(而不是Pods项目)的Frameworks文件夹中得到一个旧目标名称的版本,例如pods_oldtarget_framework,但它已经不存在了。

只需删除旧版本(或将目标名称更改回原始名称并删除新版本),然后您就可以继续了。


我必须使用pod吗?因为必须使用OneSignal来推送通知。你能帮我回答我的问题吗:https://stackoverflow.com/questions/46231264/ionic3-apple-mach-o-linker-id-error - Yuyang He

1

对我来说,缺少框架。尝试在Google上搜索您遇到的错误,并找出它们所属的框架,然后在“Build phases”选项卡中导入它们。


0

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


0
我使用了Xcode 9.3,也遇到了同样的错误。但是在9.2版本中可以正常工作。 这个错误可能是由于两个Xcode生成的构件不兼容导致的。引发错误的项目包含一个使用Xcode 9.2构建的框架。

0

如果在Unity中为iOS构建Mac版本,请确保在构建设置中禁用“其他设置”下的“Metal Editor Support”选项。


0

我曾经遇到过同样的问题,解决方法如下:

  1. 安装最新版本的CocoaPods
  2. 然后执行 pod setup

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接