XCode 6.0.1 上的 Apple Mach-O 链接器错误

Posted

技术标签:

【中文标题】XCode 6.0.1 上的 Apple Mach-O 链接器错误【英文标题】:Apple Mach-O Linker Error on XCode 6.0.1 【发布时间】:2014-09-25 10:56:00 【问题描述】:

我已将我的 XCode 更新到 6.0.1 在此更新之前,我能够在模拟器和设备中构建我的项目。但现在,它给了我 Apple Mach-O Linker Error

我经常上网。我已删除 DerivedData 文件夹。还是有问题。

我正在构建一个 Phonegap 应用程序。请帮帮我。

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_CDVWebViewDelegate", referenced from:
      objc-class-ref in CDVInAppBrowser.o
  "_OBJC_CLASS_$_CDVInvokedUrlCommand", referenced from:
      objc-class-ref in CDVContacts.o
      objc-class-ref in CDVFile.o
  "_OBJC_METACLASS_$_CDVViewController", referenced from:
      _OBJC_METACLASS_$_MainViewController in MainViewController.o
  "_OBJC_CLASS_$_CDVPlugin", referenced from:
      _OBJC_CLASS_$_CDVLogger in CDVLogger.o
      _OBJC_CLASS_$_CDVContacts in CDVContacts.o
      _OBJC_CLASS_$_CDVDevice in CDVDevice.o
      _OBJC_CLASS_$_CDVNotification in CDVNotification.o
      _OBJC_CLASS_$_CDVFile in CDVFile.o
      _OBJC_CLASS_$_CDVFileTransfer in CDVFileTransfer.o
      _OBJC_CLASS_$_CDVInAppBrowser in CDVInAppBrowser.o
      ...
  "_OBJC_METACLASS_$_CDVPlugin", referenced from:
      _OBJC_METACLASS_$_CDVLogger in CDVLogger.o
      _OBJC_METACLASS_$_CDVContacts in CDVContacts.o
      _OBJC_METACLASS_$_CDVDevice in CDVDevice.o
      _OBJC_METACLASS_$_CDVNotification in CDVNotification.o
      _OBJC_METACLASS_$_CDVFile in CDVFile.o
      _OBJC_METACLASS_$_CDVFileTransfer in CDVFileTransfer.o
      _OBJC_METACLASS_$_CDVInAppBrowser in CDVInAppBrowser.o
      ...
  "_OBJC_CLASS_$_CDVViewController", referenced from:
      _OBJC_CLASS_$_MainViewController in MainViewController.o
      objc-class-ref in CDVDevice.o
      objc-class-ref in CDVFile.o
  "_CDVLocalNotification", referenced from:
      -[AppDelegate application:didReceiveLocalNotification:] in AppDelegate.o
  "_OBJC_METACLASS_$_CDVCommandDelegateImpl", referenced from:
      _OBJC_METACLASS_$_MainCommandDelegate in MainViewController.o
  "_OBJC_CLASS_$_CDVPluginResult", referenced from:
      objc-class-ref in CDVContacts.o
      objc-class-ref in CDVDevice.o
      objc-class-ref in CDVNotification.o
      objc-class-ref in CDVFile.o
      objc-class-ref in CDVLocalFilesystem.o
      objc-class-ref in CDVAssetLibraryFilesystem.o
      objc-class-ref in CDVFileTransfer.o
      ...
  "_OBJC_CLASS_$_CDVCommandDelegateImpl", referenced from:
      _OBJC_CLASS_$_MainCommandDelegate in MainViewController.o
  "_OBJC_CLASS_$_CDVUserAgentUtil", referenced from:
      objc-class-ref in CDVInAppBrowser.o
  "_OBJC_CLASS_$_CDVCommandQueue", referenced from:
      _OBJC_CLASS_$_MainCommandQueue in MainViewController.o
  "_OBJC_METACLASS_$_CDVCommandQueue", referenced from:
      _OBJC_METACLASS_$_MainCommandQueue in MainViewController.o
  "_CDVPluginHandleOpenURLNotification", referenced from:
      -[AppDelegate application:handleOpenURL:] in AppDelegate.o
      -[CDVInAppBrowser openInSystem:] in CDVInAppBrowser.o
ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

【问题讨论】:

您需要发布实际的链接器错误消息。 @PaulR 查看编辑。这够了吗? 这有帮助 - 看起来您从 Cordova 框架中遗漏了很多东西? @PrabakaranRaja:请看我的这个答案***.com/questions/22494615/… 是的。它显示我 15 岁! 【参考方案1】:

此类问题通常在更新 Xcode 时发生,但您使用的任何第三方工具可能无法使用此架构进行更新 armv64

所以从 XCode 中单击您的项目导航器。

从您的项目中单击Targets,然后单击其中的BuildSettings

在其中找到Valid Architectures

只需双击它并从中删除armv64

确保只有 armv7 和 armv7s

如果这不起作用,请尝试删除armv7s

请检查您的所有框架是否已正确链接和引用。尝试删除并再次添加该第三方工具的框架。

请检查是否正确引用了所有框架。

就我而言,这对我有用。

清理并构建您的项目。现在应该可以正常工作了。

希望对你有帮助。

【讨论】:

如果你在项目中的某个地方导入它并且如果它被正确引用,那么它不会给你任何错误。如果是,则删除导致此错误的框架并重新添加。 它似乎工作。我已经删除然后添加了我的插件。它从 15 个错误减少到 9 个错误。我不是 XCode 方面的专家。请解释我如何引用第三方框架。在哪里以及如何? 点击您的项目,构建阶段,将二进制文件与库链接并添加所需的框架。 @PrabakaranRaja:如果我的回答对您有用,请点赞,如果它满足您的需求,请接受答案。 我可以投票。它没有解决我的问题。我已经降级回 Xcode 5.1 来解决这个问题【参考方案2】:

我找到了解决方案,不是猴子补丁,而是对项目的更正。我们需要做的是改变应用程序支持的架构:

    转到项目 -> 构建设置(检查以查看“全部”)-> 架构 -> 标准架构(armv7 armv7s arm64) 转到 Cordoba lib 项目 -> 构建设置(查看“全部”)-> 架构: 打开调试树并删除其中的所有元素 打开发布树并执行相同操作 转到 Cordoba lib 项目(这次选择目标)并执行第 2 步的相同操作

有关详细信息,请参阅youtube video。

【讨论】:

感谢 youtube 链接!这是唯一对我有用的答案。谢谢【参考方案3】:

您可以像 Manthan 所说的那样删除 64 位支持,但为了符合应用商店 (starting 1 February 2015),您确实需要它。我建议开始将所有框架等更新到支持 64 位的版本。

根据我的所见所闻,使用Cocoapods 是最简单的方法,因为它非常容易控制您的框架版本以及更新和降级到其他版本。我建议找出您当前的框架版本,然后从那里慢慢更新它们,直到找到一个支持 64 位的版本,该版本适用于您当前的构建。

我发现的另一种通常可以修复 mach-o 错误的方法如下:

确保 Target => Architectures => Build Active Architectures 设置为 NO。 确保Target => Search Paths => Framework search pathsLibrary search paths 的第一个条目是$(inherited)

转换为 64 位可能是一项非常艰巨的任务,但从长远来看可能是值得的。

【讨论】:

【参考方案4】:

我在导入一些git项目时遇到了同样的问题,终于在更改开发目标时找到了解决方案。

转到项目->常规->开发信息并更改部署目标。

【讨论】:

那是部署目标吗?【参考方案5】:

我卸载了整个 XCode 6。 我更新了我的mac中的phonegap并重新安装了它。 创建了一个新的 phonegap 项目。将代码(www 文件夹)复制到新项目中。 构建它。它在 XCode 6 中运行良好。

抱歉回复晚了

【讨论】:

以上是关于XCode 6.0.1 上的 Apple Mach-O 链接器错误的主要内容,如果未能解决你的问题,请参考以下文章

XCode/PhoneGap - Apple Mach-O 链接器错误

如何修复 xcode 中的 Apple Mach-O 链接器错误组问题?

Xcode - 在 AppDelegate 中加载声音时出现 Apple Mach-O 链接器错误

如何删除 Xcode 警告 Apple Mach-O Linker Warning 'Pointer notalign at address

xCode iOS 开发 - Apple Mach-O 链接器错误 // Dsymutil 错误

Apple Mach-O 链接器 (ld) 错误 swift 3.0 和 Xcode 8.3.3