2014-09-25 53 views
5

我已将我的XCode更新为6.0.1 在此更新之前,我能够在模拟器和我的设备中构建我的项目。但现在,它给我苹果Mach-O链接器错误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) 
+0

您需要发布实际的链接器错误消息。 – 2014-09-25 10:58:55

+0

@PaulR请参阅编辑。这够了吗? – 2014-09-25 11:03:46

+0

这有帮助 - 它看起来像缺少Cordova框架中的一堆东西? – 2014-09-25 11:06:13

回答

6

这样那样的问题,同时更新您的Xcode普遍发生,但你使用任何第三方工具可能不适合该架构armv64进行更新。

因此,从XCode单击您的Project Navigator。

从您的项目点击Targets,然后点击BuildSettings

查找其中的Valid Architectures

只需双击并从中删除armv64

确保只有armv7和armv7s

如果这不起作用,然后尝试删除armv7s也。

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

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

在我的情况下,这对我有效。

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

希望它可以帮助你。

+0

如何检查框架是否正确链接? – 2014-09-25 11:20:34

+0

如果你将它导入到你的项目的某个地方,并且它被正确地引用了,那么它将不会给你任何错误。如果是,那么删除导致这个错误的框架并重新添加。 – Manthan 2014-09-25 11:22:33

+0

它似乎工作。我已经删除,然后添加我的插件。它从15个减少到9个。我不是XCode的专家。请解释我如何引用第三方框架。在哪里以及如何? – 2014-09-25 11:55:18

0

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

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

+0

是**部署目标**吗? – 2015-02-19 14:03:03

+0

是的,谢谢你纠正我。 – adnan 2015-02-20 07:15:41

1

您可以像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位可能是一项非常艰巨的任务,但从长远来看可能是值得的。

0

我卸载了整个XCode 6. 我更新了我的mac中的phonegap并重新安装了一遍。 创建了一个新的phonegap项目。将代码(www文件夹)复制到新项目中。 建立它。而且它在XCode中工作正常6.

很抱歉的延迟回复

4

我找到了解决办法,是不是猴子补丁,它是一个项目的修正。我们需要做的,以更改应用程序所支持的架构是什么:

  1. 转到项目 - >构建设置(请查看“所有”) - >架构 - >标准架构(ARMv7的armv7s arm64)
  2. 转到科尔多瓦的lib项目 - >构建设置(请查看“所有”) - >架构
    • 打开调试树并删除所有元素中他们
    • 打开释放树,做相同
  3. 转到科尔多瓦LIB项目(选择目标这段时间)做同样的步骤2

youtube video详细信息。

+0

为youtube链接的荣誉!这是唯一对我有用的答案。谢谢 – fruqi 2015-07-07 07:55:52