文件是通用的(三个切片),但是对于iOS上的静态库,文件不包含ARMv7-s切片错误,无论如何都要绕过?


403

我升级了Xcode版本,并在使用外部静态库时收到以下消息:

ld:文件是通用文件(3个切片),但不包含armv7s切片:体系结构armv7s clang的/ file / location:错误:链接器命令失败,退出代码为1(使用-v查看调用)

如果库的开发人员尚未更新其库,是否有任何方法可以绕过此过程并向库添加支持?


这似乎是一个很好的解决方案现在- galloway.me.uk/2012/09/hacking-up-an-armv7s-library
Rajavanya Subramaniyan

Answers:


418

如果要删除对任何体系结构的支持,例如您的情况下的ARMv7-s,请使用菜单项目 -> 构建设置 ->从“有效体系结构”中删除该体系结构。

您可以将其用作临时解决方案,直到库已更新。您必须从主项目而不是从库中删除体系结构。

或者,可以将调试配置的“仅构建活动体系结构”的标志设置为“是”。将发布配置的“仅构建活动体系结构”保留为“否”,只是为了在发布之前提示您应该升级正在使用的任何第三方库。


11
您不必重新编译库。您可以从使用该库的项目中删除此标志。
尼古拉斯

4
这将起作用,因为尚未使用armv7s支持编译的旧应用程序也必须运行。但是您将失去一些特定的优化。无论如何,这应该是一个临时解决方法。
尼古拉斯

2
针对此问题的Dropbox框架已更新,请参阅forums.dropbox.com/topic.php?id=90014
铁路游行

6
从“有效体系结构”列表中删除armv7对我有用,但是从“体系结构”中删除它也是如此。但是,在两种情况下,No architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).我都只能通过添加i386到“有效体系结构”列表中的链接器来解决。
levigroker

6
不,armv7s是iPhone 5中使用的A6处理器的指令集。由于A6是向后兼容的,因此它仍将运行armv7指令集。
尼古拉斯

191

我已经在目标的构建设置中将“仅构建活动体系结构”切换为“是”,现在可以了!


1
@ Blasco73你甚至知道你很棒吗?你应该。先生,这太棒了!
thandasoru 2012年

15
这怎么可能是一个好的解决方案。它消除了错误,但是您只为当前的拱门建造,而不是全部在市场上……
esbenr

27

尝试从项目的“有效架构”中删除armv7,以从iOS 5.1手机的本期发行


13

我刚刚在这里发布了一个修复程序,该修复程序也适用于这种情况-基本上,您在外部库中进行了十六进制查找和替换,使其认为它是ARMv7s代码。您应该能够将lipo其分解为3个静态库,复制/修改ARMv7,然后lipo再次使用来为所有4种架构组装一个新的库。


5

对iPhone 5(ARMv7s)的Flurry支持正如我在昨天的帖子中提到的,Flurry在周三宣布之后立即开始开发iOS SDK版本,以在新iPhone 5中支持ARMv7s处理器。

我很高兴地告诉您,这项工作已经完成,并且现在可以在该站点上使用SDK。


4

使用菜单项目->构建设置->

然后从“有效架构”中删除armv7。如果选择了标准,则将其删除,然后添加armv7。


1

万一这发生在某人身上。我建立了自己的库以与第三方代码一起使用。在构建要交付的版本时,我不小心将iPhone 4S插入了电源,因此Xcode仅为插入的体系结构构建了我的库,而没有遵循项目设置。删除所有插入的设备并重建库,将其链接,就可以了。

希望能帮助到你。


0

就我而言,我链接到一个有点旧的第三方库(为iOS 6开发,在XCode 5 / iOS 7上)。因此,我不得不更新第三方库,执行“清理并构建”,它现在可以成功构建。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.