Mach-O链接器错误 Xcode 5

3

我刚刚升级了我的Xcode到5.0.2版本。在升级后,我之前运行良好且已归档的所有应用程序,在我尝试将它们归档以进行在设备上测试时(未连接设备)都会出现以下错误。

Ld /Users/dharammalik/Library/Developer/Xcode/DerivedData/lite_test-hblolzuqyvugvdfpenjeoxvmovrk/Build/Intermediates/ArchiveIntermediates/lite_test/IntermediateBuildFilesPath/lite_test.build/Release-iphoneos/lite_test.build/Objects-normal/armv7s/lite_test normal armv7s
    cd /Users/dharammalik/Documents/PhonegapWorkspace/lite_test
    setenv IPHONEOS_DEPLOYMENT_TARGET 5.0
    setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch armv7s -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk -L/Users/dharammalik/Library/Developer/Xcode/DerivedData/lite_test-hblolzuqyvugvdfpenjeoxvmovrk/Build/Intermediates/ArchiveIntermediates/lite_test/BuildProductsPath/Release-iphoneos -F/Users/dharammalik/Library/Developer/Xcode/DerivedData/lite_test-hblolzuqyvugvdfpenjeoxvmovrk/Build/Intermediates/ArchiveIntermediates/lite_test/BuildProductsPath/Release-iphoneos -filelist /Users/dharammalik/Library/Developer/Xcode/DerivedData/lite_test-hblolzuqyvugvdfpenjeoxvmovrk/Build/Intermediates/ArchiveIntermediates/lite_test/IntermediateBuildFilesPath/lite_test.build/Release-iphoneos/lite_test.build/Objects-normal/armv7s/lite_test.LinkFileList -dead_strip -weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -all_load -Obj-C -fobjc-link-runtime -miphoneos-version-min=5.0 -framework CoreLocation -framework ImageIO -framework OpenAL -framework AssetsLibrary /Users/dharammalik/Library/Developer/Xcode/DerivedData/lite_test-hblolzuqyvugvdfpenjeoxvmovrk/Build/Intermediates/ArchiveIntermediates/lite_test/BuildProductsPath/Release-iphoneos/libCordova.a -framework Foundation -weak_framework UIKit -framework CoreGraphics -framework AddressBook -framework AddressBookUI -framework AudioToolbox -weak_framework AVFoundation -framework CFNetwork -framework MediaPlayer -framework QuartzCore -framework SystemConfiguration -framework MobileCoreServices -weak_framework CoreMedia -framework CoreLocation -Xlinker -dependency_info -Xlinker /Users/dharammalik/Library/Developer/Xcode/DerivedData/lite_test-hblolzuqyvugvdfpenjeoxvmovrk/Build/Intermediates/ArchiveIntermediates/lite_test/IntermediateBuildFilesPath/lite_test.build/Release-iphoneos/lite_test.build/Objects-normal/armv7s/lite_test_dependency_info.dat -o /Users/dharammalik/Library/Developer/Xcode/DerivedData/lite_test-hblolzuqyvugvdfpenjeoxvmovrk/Build/Intermediates/ArchiveIntermediates/lite_test/IntermediateBuildFilesPath/lite_test.build/Release-iphoneos/lite_test.build/Objects-normal/armv7s/lite_test

ld: warning: ignoring file /Users/dharammalik/Library/Developer/Xcode/DerivedData/lite_test-hblolzuqyvugvdfpenjeoxvmovrk/Build/Intermediates/ArchiveIntermediates/lite_test/BuildProductsPath/Release-iphoneos/libCordova.a, file was built for archive which is not the architecture being linked (armv7s): /Users/dharammalik/Library/Developer/Xcode/DerivedData/lite_test-hblolzuqyvugvdfpenjeoxvmovrk/Build/Intermediates/ArchiveIntermediates/lite_test/BuildProductsPath/Release-iphoneos/libCordova.a
Undefined symbols for architecture armv7s:
  "_OBJC_METACLASS_$_CDVCommandDelegateImpl", referenced from:
      _OBJC_METACLASS_$_MainCommandDelegate in MainViewController.o
  "_CDVLocalNotification", referenced from:
      -[AppDelegate application:didReceiveLocalNotification:] in AppDelegate.o
  "_OBJC_CLASS_$_CDVCommandDelegateImpl", referenced from:
      _OBJC_CLASS_$_MainCommandDelegate in MainViewController.o
  "_OBJC_CLASS_$_CDVCommandQueue", referenced from:
      _OBJC_CLASS_$_MainCommandQueue in MainViewController.o
  "_OBJC_METACLASS_$_CDVViewController", referenced from:
      _OBJC_METACLASS_$_MainViewController in MainViewController.o
  "_OBJC_METACLASS_$_CDVCommandQueue", referenced from:
      _OBJC_METACLASS_$_MainCommandQueue in MainViewController.o
  "_CDVPluginHandleOpenURLNotification", referenced from:
      -[AppDelegate application:handleOpenURL:] in AppDelegate.o
  "_OBJC_CLASS_$_CDVViewController", referenced from:
      _OBJC_CLASS_$_MainViewController in MainViewController.o
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

尝试更改架构,但仍无法解决问题。有什么想法可以解决这些问题吗?在我之前使用的Xcode版本中根本没有这些问题。


我会尝试删除DerivedData目录下的内容,或者从Xcode进行“Clean”操作。 - vcsjones
清理项目对我没有起作用。 - Sana
5个回答

9
valid architectures 部分中删除 armv7s,它就可以工作了。
构建设置 --> 架构 --> 有效架构 enter image description here

1
这样做会有什么影响?这是否意味着该应用程序无法在新的iPad Air上运行?这会导致我的应用程序被App Store拒绝吗? - Rob
我在确认后发布了这个答案。您可以参考我的问题https://dev59.com/rGYr5IYBdhLWcg3wQYJa - Harikrishnan
我没有有效的架构选项? - Abe Petrillo
@AbePetrillo 1) 点击左侧面板上带有蓝色图标的项目名称(类似树形排列)。2)选择构建设置选项卡。3)会出现一个小型搜索框,您可以在其中搜索“valid”,然后“Valid Architectures”将出现。 - Harikrishnan
1
@AbePetrillo 在“构建设置”面板的左上角区域中,选择“全部”而不是“基本”。 - rjhilgefort

3

Buid 设置 ---> 架构 ---> 仅构建活动架构 更改为 即可解决在新的 Xcode 5 中使用旧版 cordova 的问题。


我正在使用Cordova 3.3.0,这是解决我的问题的罪魁祸首 - 谢谢 - SolThoth

2

我曾经遇到过同样的问题,问题出在我不小心在实现文件中导入了一个 .m 文件而不是 .h 文件 - 希望这能帮到你。


0
libCordova.a, file was built for archive which is not the architecture being linked (armv7s)

看起来你的 libCordova 框架副本中不包含 armv7s 二进制文件。


有什么解决方案吗? - Sana
将架构更改为仅限于armv7。或者您可以重新编译(Cordova是否有源代码?)Cordova以包括armv7s。由于您正在构建armv7和armv7s,因此它期望所有libs/frameworks都包含这两种架构。除非您需要armv7s处理器中的少数附加指令,否则您不需要armv7s。 - ahwulf

0
你需要在CordovaLib项目中更改架构,而不是在你的lite_test项目中更改。我猜当你说你尝试更改架构时,你只是在你的项目中尝试了,并没有在Cordova项目中尝试(因为在Cordova中更改对我有效)。请记住,Cordova是一个依赖项目,并且每次运行时都会编译到二进制文件中。

请问您能告诉我应该遵循哪些详细步骤来消除这些错误吗? - Sana

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