【问题标题】:Xcode 4 Final - "armv6 armv7" issue while linking with armv6 libsXcode 4 Final - 与 armv6 库链接时出现“armv6 armv7”问题
【发布时间】:2011-07-16 01:08:52
【问题描述】:

直到 xcode 4 最终版(我使用的是 3.latest 和 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").

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

谢谢,

费尔南多

【问题讨论】:

    标签: iphone xcode static-linking armv7 armv6


    【解决方案1】:

    我刚刚在 Project -> Build Setting -> Architectures 选项卡中将 Build active architecture only 设置为 Yes。

    【讨论】:

    • 我想说这只会防止当前设备发生此错误。归档提交后,您会希望支持所有架构
    • THX - 这解决了以下问题:错误:架构 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
    【解决方案2】:

    在 iOS SDK 4.3 中,链接器似乎会简单地拒绝在 armv7 二进制文件中使用 armv6 库 - 以前不是这种情况。

    这就是为什么我必须更新 http://code.google.com/p/ios-static-libraries/ 项目以生成 armv6 和 armv7 版本的库。

    【讨论】:

      【解决方案3】:

      我已将带有一些演示类的 3rd 方框架添加到项目中,但一旦成功实施,我就删除了这些演示类,从那时起错误开始出现 错误 "ld: .........,文件是通用的,但不包含架构 armv6 的 (n) 个 armv6 切片"

      挠了一整天的头后,我发现这个解决方案第二天早上可能对 iPhone 伙伴有帮助,因为我知道痛苦

      Targets->"Your Project Target"-> Get Info ->Build Active Architecture only 设置为 YES

      就是这样..

      【讨论】:

        【解决方案4】:

        遇到了同样的问题。 但我想原因是不同的。 我正在使用为模拟器构建的 library.a 文件并尝试在设备上运行它。我知道我需要不同的 .a 文件用于模拟器和设备。我希望这对某人有所帮助;)

        【讨论】:

        • 在哪里我会得到不同的 .a 设备文件,我需要在设备上运行它运行良好但数据库为空白无法正常工作
        • 您可以使用为模拟器生成文件的相同代码为设备生成文件。您只需将目标更改为设备。
        【解决方案5】:

        虽然我仍然不知道为什么这仅在 xcode 4 最终版本中开始发生,但我发现我的外部库(ssl 和加密)是在几天前的 google 代码项目中针对 armv6 和 armv7 编译的:

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

        如果您定义两个不同的库搜索路径,这将解决问题:一个用于 armv6,一个用于 armv7。

        谢谢,

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-21
          • 2012-08-01
          • 1970-01-01
          • 2012-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多