Xcode 4 最终版 - 在与 armv6 库链接时遇到 "armv6 armv7" 问题

17

直到 Xcode 4 正式版之前 (我一直使用 3.x 最新版以及 4 GM 版本),这种情况从未发生过。 当我升级到 Xcode 4 正式版后,我在尝试将 armv7 版本与我的非 armv7 库链接时遇到了链接错误(我的项目设置为默认的标准 armv6 armv7 可用结构):

ld: warning: ignoring file ../bin/iOS static/arm/libssl.a, file was built for archive which is not the architecture being linked (armv7)
ld: warning: ignoring file ../bin/iOS static/arm/libcrypto.a, file was built for archive which is not the architecture being linked (armv7)
Undefined symbols for architecture armv7: -- list of symbols --

armv6版本可以编译成功,但是整个编译过程会失败,并出现77个链接错误。

我知道这是预期行为,它不会将armv6库链接到armv7。解决方法是将我的项目设置为仅支持armv6。我的问题是:为什么在之前的Xcode版本中可以正常工作?

如果我设置为仅支持armv6,就会收到以下警告:

Check dependencies

[BWARN]warning: all apps should include an armv7 architecture (current ARCHS = "armv6").

我不喜欢看到警告 :-) 有人遇到类似的问题吗?

谢谢,

Fernando

5个回答

22

我只是在项目中的 Build Setting -> Architectures 标签中将 Build active architecture only 设置为 Yes。


3
我认为这只能防止当前设备出现此错误。一旦您进行存档以供提交,您将希望支持所有架构。 - Jakob
THX - 这解决了以下问题: 错误:Undefined symbols for architecture armv7s: “OBJC_CLASS$_QREncoder”,引用自: 警告:ld: 警告:忽略文件 /Users/neo/Library/Developer/Xcode/DerivedData/WinNav-fycjhbccktevjdbrxudedbysqxmy/Build/Products/Debug-iphoneos/libqrencoder.a,该文件是为不是正在链接的架构(armv7s)而构建的存档:/Users/neo/Library/Developer/Xcode/DerivedData/WinNav-fycjhbccktevjdbrxudedbysqxmy/Build/Products/Debug-iphoneos/libqrencoder.a - Thorsten Niehues

7
在iOS SDK 4.3中,链接器似乎会拒绝在armv7二进制文件中使用armv6库——这在之前不是这样的。这就是为什么我不得不更新http://code.google.com/p/ios-static-libraries/项目以生成库的armv6和armv7版本的原因。

3

我将一个第三方框架和一些演示类添加到项目中,但是一旦成功实施后,我删除了那些演示类,从那时起就出现了错误。

错误信息 "ld: ........., 文件是通用的,但不包含armv6架构的armv6片段"

经过一整天的思考,第二天早上我找到了这个解决方法。这可能对iOS开发者有帮助,因为我知道这种痛苦。

目标->"你的项目目标"->获取信息->Build-只激活架构设置为YES

就是这样。


1

我遇到了同样的问题。 但我想原因可能不同。 我正在使用为模拟器构建的library.a文件,并尝试在设备上运行它。后来发现我需要为模拟器和设备使用不同的.a文件。希望这能帮助到某些人;)


我需要在设备上运行不同的 .a 文件,但是数据库为空,无法正常工作。请问我应该从哪里获取这些文件? - Shobhakar Tiwari
你可以使用生成模拟器文件的代码来生成设备文件,只需要将目标更改为设备即可。 - Zaraki

0

虽然我仍然不知道为什么这只发生在xcode 4最终版本中,但是我发现我的外部库(ssl和crypto)很少几天前已经在谷歌代码项目中编译成了armv6和armv7:

http://code.google.com/p/ios-static-libraries/

如果你为armv6和armv7定义了两个不同的库搜索路径,这将解决问题。

谢谢,


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