【问题标题】:How to link iPad Air app (arm64) against existing armv7 static libraries?如何将 iPad Air 应用程序(arm64)与现有的 armv7 静态库链接?
【发布时间】:2014-08-11 18:17:34
【问题描述】:

我已经编译了 armv7 静态库 (lib*.a),我将编译 iPad Air 应用程序 (arm64)。 我收到链接器警告,然后是链接器错误:

$ lipo -info /Users/user/Documents/dev/src/iOS_Projects/iProject/libMyLib.a
input file /Users/user/Documents/dev/src/iOS_Projects/iProject/libMyLib.a is not a fat file
Non-fat file: /Users/user/Documents/dev/src/iOS_Projects/iProject/libMyLib.a is architecture: armv7

Ld: warning: ignoring file /Users/user/Documents/dev/src/iOS_Projects/iProject/libMyLib.a, file was built for archive which is not the architecture being linked (arm64): /Users/user/Documents/dev/src/iOS_Projects/iProject/libMyLib.a ignoring file

为 arm64 重新编译静态库是不可取的(并且可能是不可能的)。我该如何使用它们?

【问题讨论】:

    标签: xcode linker arm armv7 arm64


    【解决方案1】:

    困难重重。

    您只能在异常边界处在 AArch32 状态和 AArch64 状态之间切换,因此例如64 位内核/32 位用户空间是可能的,不可能在一个进程中同时使用两者。因为它是一个完全不同的指令集/寄存器布局/异常模型/等。没有 ARM/Thumb 风格的 32/64 位互通(本质上只是相同指令的不同编码)。

    总的来说(我不熟悉 iOS 的具体细节,但我认为它支持“旧版”AArch32 进程,就像 Linux 一样):

    • 如果这些库完全集成到您的代码中,那么最好的办法就是简单地将您的应用程序编译为 32 位。
    • 如果您有超级关键的绝对必须是 64 位代码,但库调用不在快速路径中,您可以将它们编译成一个 32 位帮助程序,作为附加进程生成并通过某种形式的 IPC 调用。
    • 否则,您将看到某种形式的 binary translation 的可笑不切实际的前景。

    我认为 iOS 不支持 IPC,因此在这种特殊情况下排除了第二个选项。

    【讨论】:

    • 正是我想听到的:)
    猜你喜欢
    • 1970-01-01
    • 2015-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多