Cordova 更新到Xcode 5后-ld:未找到架构armv7或armv7s链接器的符号错误 我刚刚更新了我的iPhone 4S软件到iOS 7 beta 2,而我是在最后一次触摸一个新的应用程序(PoPiGAP)的中间。这不是个好主意

Cordova 更新到Xcode 5后-ld:未找到架构armv7或armv7s链接器的符号错误 我刚刚更新了我的iPhone 4S软件到iOS 7 beta 2,而我是在最后一次触摸一个新的应用程序(PoPiGAP)的中间。这不是个好主意,cordova,static-libraries,cpu-architecture,ios7,xcode5,Cordova,Static Libraries,Cpu Architecture,Ios7,Xcode5,完成后,Xcode没有检测到我的iPhone,所以我安装了Xcode 5测试版。在对它进行修补之后,我终于找到了它来检测我的手机。现在唯一的问题是所使用的架构存在错误 以下是产生的错误: ld: warning: ignoring file /Users/-----------/Library/Developer/Xcode/DerivedData/testtest-bmnbmujiosugcmgeiceofgcfmsec/Build/Products/Debug-iphoneos/libCor

完成后,Xcode没有检测到我的iPhone,所以我安装了Xcode 5测试版。在对它进行修补之后,我终于找到了它来检测我的手机。现在唯一的问题是所使用的架构存在错误

以下是产生的错误:

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)

为了让它在我的手机上正常工作,有没有关于架构应该改成什么的想法?(在模拟器上工作正常)

简短回答:

  • 从所有静态库的项目构建设置中删除仅构建活动体系结构(构建设置参数键为'Only_Active_ARCH'),或使用以下屏幕截图中的'NO'将其覆盖:
详细答案:

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

您可能已经让Xcode为静态库项目执行了所有建议的更改,而没有阅读这些更改的实际内容。就我自己而言,直到现在,当我切换到一个新版本的Xcode时,我从未仔细查看过这个信息对话框(下面的屏幕截图)。

问题在于,执行这些更改会激活调试生成一个新功能,名为“仅构建活动体系结构”(Build Active Architecture Only)
(生成设置参数键为“Only\u Active\u ARCH”)。原则上,这是对Xcode的一个非常酷的增强,因为将其设置为“是”会加快构建时间,因为当您点击“运行”按钮时,Xcode只编译您当前在顶部选择的连接设备的体系结构

但是,在静态库中盲目接受这个新参数时,您可能会遇到这个错误。当您在连接armv7设备时构建了静态库的调试版本,然后在调试主应用程序时连接了armv7s设备(反之亦然),就会出现此错误。随后将出现上述错误(或类似错误)


因此,我的建议是从所有静态库的项目构建设置中完全删除“仅构建活动体系结构”的项目级值。因为如果您查看iOS默认值,它是否。当然,您也可以将设置覆盖为“否”,以确保设置正确,即使将来默认值将更改(参见第1个屏幕截图)。

如果您的项目是使用Cordova 2.x和Xcode 4.x构建的,并且您收到OP提到的错误,这个解决方案对我有效。(我在Cordova 2.5和Xcode 5中遇到了错误)

转到您的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=iphoneos7.*]" = (
        armv7,
        armv7s,
    );
    "ARCHS[sdk=iphoneos6.*]" = (
        armv7,
        armv7s,
    );
    /* other settings here */
};

现在你的项目将建立良好

njtman的回答是正确的。我没有代表评论,所以我添加了更多细节

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

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

为了解决这个问题, 打开CordovaLib.xcodeproj, 在“生成设置”下(顶行中的一个菜单,居中对齐)
在“体系结构、体系结构、调试和发布”下,添加使用标准体系结构的iOS 7.0。

因为我的lib.a仅适用于armv7

我所做的是

仅活动体系结构=是 这是建立和存档的罚款

希望它对构建设置有所帮助

Strip Debug Symbols During  Copy: 

Debug: No

Release: No

我已经从
有效体系结构
部分删除了
armv7s
,它对我有效

生成设置-->体系结构-->有效体系结构

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 */
};

我使用的是Xcode 5,所以iOS SDK 7。对我有效的解决方案就是删除arm64架构

选择项目目标(不是CordovaLib.xcodeproj),并在“构建设置”>“有效体系结构”中,删除列表中的arm64。这是我在移除arm64架构后得到的


构建设置->体系结构中有哪些内容?我只有一个:$(ARCHS_标准\u 32_位),在有效的体系结构下,我有:armv7和armv7sDidn不适用于我。我在模拟机上。还有什么遗漏吗?@Tafkadasoh您是否知道如何在Xcode 5中禁用此警告(而不禁用任何其他与源代码相关的警告)?帮助我使用此信息的说明:请注意,您需要在CordovaLib.xcodeproj目标中进行建议的更改(我使用的是PhoneGap 2.9)不仅仅是你的PhoneGap应用目标。如果不在CordovaLib目标中更改它,即使是干净/构建也不会强制使用正确的体系结构来构建libCordova.a。我在找到基本相同的问题后找到了这个答案(感谢您验证我认为正确的解决方案!)。唉,这没什么区别,我还是会犯很多错误。(在尝试将arm64添加到混音中,然后将其更改回来之后,这一切对我来说都是南辕北辙。)@Rkartikeyan只需在项目设置中选择相应的行(参见第1个屏幕截图)并点击退格键即可。Cordova 2.7和XCode 5对我非常有效。Tafkadsoh的解决方案对我不起作用。这很好用!谢谢。在Cordova 2.6项目中对我来说非常有用。我很惊讶“iphoneos7.*”条目不能通过xcode用户界面生成……Cordova 3似乎不再是这样了。1@Ghigo正如我的回答所述,此解决方案仅适用于Cordova 2.x。这些设置在Cordova 3.x中应该已经或多或少存在了,因为它从一开始就支持iOS7
Strip Debug Symbols During  Copy: 

Debug: No

Release: No