我已将我的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 :(得分:6)
更新Xcode时通常会出现此类问题,但您使用的任何第三方工具都可能无法使用此架构进行更新armv64
。
所以点击XCode上的Project Navigator。
点击项目中的Targets
,然后点击BuildSettings
。
在其中找到Valid Architectures
。
只需双击它并从中删除armv64
即可。
确保只有armv7和armv7s
。
如果这不起作用,请尝试同时删除armv7s
。
请检查所有框架是否正确链接并引用。尝试删除并再次添加该第三方工具的框架。
请检查所有框架是否已正确引用。
就我而言,这对我有用。
清理并构建您的项目。它现在应该可以正常工作。
希望它对你有所帮助。
答案 1 :(得分: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 paths
,Library search paths
有$(inherited)
作为第一个条目。转换为64位可能是一项非常艰巨的任务,但从长远来看可能是值得的。
答案 3 :(得分:0)
当我导入一些git项目时,我遇到了同样的问题,最终找到了改变开发目标的解决方案。
转到Project-> General->开发信息并更改部署目标。
答案 4 :(得分:0)
我卸载了整个XCode 6。 我更新了我的mac中的phonegap并重新安装了它。 创建了一个新的phonegap项目。将代码(www文件夹)复制到新项目中。 建立它。它在XCode 6中运行良好。
对不起延迟回复