更新到Xcode 5 – ID:符号(S)未find架构armv7或armv7s链接器错误

我刚刚更新我的iPhone 4S软件到iOS 7 Beta 2,而我正在把一个新的应用程序(Phonegap)的最后一个接触..不是一个好主意!

完成后,Xcode没有检测到我的iPhone,所以我安装了Xcode 5testing版。 经过修改后,我终于find了我的手机。 现在唯一的问题是使用的架构有错误。

这里是错误正在产生:

ld: warning: ignoring file /Users/-----------/Library/Developer/Xcode/DerivedData/testtest-bmnbmujiosugcmgeiceofgcfmsec/Build/Products/Debug-iphoneos/libCordova.a, file was built for archive which is not the architecture being linked (armv7s): /Users/--------/Library/Developer/Xcode/DerivedData/testtest-bmnbmujiosugcmgeiceofgcfmsec/Build/Products/Debug-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) 

任何关于什么架构应该改变,以使其在我的手机上工作的想法? (它在仿真器上工作正常)

简短的回答:

  • 从所有静态库的项目构build设置中删除构build主动架构 (构build设置参数键为'ONLY_ACTIVE_ARCH'),或像下面的屏幕截图一样用'NO'覆盖它: 将“仅构建主动架构”覆盖为“否”或完全删除它的条目以回退到iOS默认值

详细答案:

问题是你在你的主应用程序中链接的静态库“libCordova.a”只针对一个体系结构(armv7,而不是armv7s)进行编译。

你可能会让Xcode为你的静态库项目执行所有build议的更改,而不必读取这些更改的实际内容。 说起自己,我从来没有仔细看过这个信息对话框(下面的截图),当我切换到新版本的Xcode – 直到现在。 在这里输入图像说明

问题是执行这些更改激活debugging构build一个新function称为构build主动架构只有 (build设设置参数键是“ONLY_ACTIVE_ARCH”)。 原则上,这是Xcode的一个非常酷的增强,因为将其设置为YES会导致构build时间更快,因为Xcode只会在您点击运行button时编译当前选定的连接设备的体系结构。

但是,在静态库中盲目地接受这个新参数时,可能会遇到这个错误。 当你连接了一个armv7设备的时候,你已经构build了一个静态库的debugging版本,然后,当你debugging你的主应用程序时,你连接了一个armv7s设备(反之亦然)。 随后你会得到上面的错误(或类似的错误)。

所以我的build议是从所有静态库的项目构build设置中完全删除项目级别的Build Active Architecture Only值。 因为如果你看看iOS的默认值,那么是NO。 当然,您也可以将设置覆盖为“NO”,以确保设置是正确的,即使将来默认值会改变(参见第1张截图)。

如果您的项目是使用Cordova 2.x和Xcode 4.x构build的,并且您收到OP提到的错误,则此解决scheme适用于我。 (我遇到了Cordova 2.5和Xcode 5的错误)。

https://issues.apache.org/jira/browse/CB-3768

去你的cordova项目

根文件夹 – > CordovaLib – >右键单击CordovaLib.xcodeproj – >显示软件包内容 – >打开project.pbxproj

将所有出现的(我有4个)

 buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO;//in 2 out of 4 occurrences "ARCHS[sdk=iphoneos*]" = armv7; "ARCHS[sdk=iphoneos6.*]" = ( armv7, armv7s, ); /* other settings here */ }; 

有了这个

 buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO;//in 2 out of 4 occurrences "ARCHS[sdk=iphoneos*]" = armv7; "ARCHS[sdk=iphoneos7.*]" = ( armv7, armv7s, ); "ARCHS[sdk=iphoneos6.*]" = ( armv7, armv7s, ); /* other settings here */ }; 

现在你的项目将build立好!

我已经从valid architectures部分删除了armv7s ,并为我工作。

构build设置 – >体系结构 – >有效的体系结构

Xcode构建设置

我正在使用Xcode 5,所以iOS SDK 7。为我工作的解决scheme是简单地删除arm64体系结构。

select项目目标(不是CordovaLib.xcodeproj),并在构build设置>有效体系结构中删除arm64,如果它在列表中。 我删除arm64架构后,这是我的。

在这里输入图像说明

因为我的lib.a只用于armv7

我做了什么

只有活动架构=是

 buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; "ARCHS[sdk=iphoneos*]" = ( armv7s, armv7, ); "ARCHS[sdk=iphoneos6.*]" = ( armv7s, armv7, ); "ARCHS[sdk=iphoneos7.*]" = ( armv7, armv7s, ); 

这是build立和存档罚款

希望能帮助到你

恩特曼有一个正确的答案。 我没有代表评论,所以我增加了更多的细节。

你需要一个iOS 7 SDK来使用标准体系结构(armv7,armv7s)。

我的项目默认为(armv7),不包括armv7s。

为了解决这个问题,打开CordovaLib.xcodeproj,在构build设置下(首行中的一个菜单,居中alignment)在体系结构,体系结构,debugging和发布下,使用标准体系结构添加iOS 7.0。

在生成设置…

 Strip Debug Symbols During Copy: Debug: No Release: No