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

时间:2014-09-25 10:56:00

标签: ios xcode cordova xcode6 linker-errors

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

我经常冲浪。我删除了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)

5 个答案:

答案 0 :(得分:6)

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

所以点击XCode上的Project Navigator。

点击项目中的Targets,然后点击BuildSettings

在其中找到Valid Architectures

只需双击它并从中删除armv64即可。

确保只有armv7和armv7s

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

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

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

就我而言,这对我有用。

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

希望它对你有所帮助。

答案 1 :(得分:4)

我找到了解决方案,不是一个猴子补丁,它是对项目的修正。我们需要做些什么来改变应用程序支持的体系结构:

  1. 转到项目 - >构建设置(查看"所有") - >架构 - >标准架构(armv7 armv7s arm64)
  2. 转到 Cordoba lib项目 - >构建设置(查看"所有") - >架构
    • 打开调试树并删除其中的所有元素
    • 打开发布树并执行相同的操作
  3. 转到 Cordoba lib项目(这次选择目标)并执行相同的步骤2
  4. 有关详细信息,请参阅youtube video

答案 2 :(得分:1)

您可以删除64位支持,但Manthan说,但是对于应用商店合规性(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位可能是一项非常艰巨的任务,但从长远来看可能是值得的。

答案 3 :(得分:0)

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

转到Project-> General->开发信息并更改部署目标。

答案 4 :(得分:0)

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

对不起延迟回复