【问题标题】:Using Shared Object File in iOS (.so file)在 iOS 中使用共享对象文件(.so 文件)
【发布时间】:2012-11-16 22:44:30
【问题描述】:

我得到了一个共享对象文件 (.so) 和其中的函数,但我不知道如何使用它,或者更改它以在 iOS 应用程序中使用。有人能指出我正确的方向吗?

我知道 .so 来自 Android 应用程序,但有人告诉我我也可以让它在 iOS 应用程序中工作。

【问题讨论】:

    标签: ios shared-objects


    【解决方案1】:

    虽然技术上可行(请参阅 h2co3 的回答),但对于任何实用的问题,答案是否定的

    • 所以文件不是正确的二进制格式
    • 即使是这样,appstore 也不允许动态加载

    【讨论】:

    • 这不是一个真正的实用应用程序。它可能永远处于开发模式,永远不会投入生产。不过,它可以很好地发挥其作用!
    • @Daij-Djan:我们可以看到一些 sdk,例如 facebook/(或)Other 具有动态库 (.dylib)。我们也可以将其上传到应用商店。如何使用 xcode 创建它?
    • stackoverflow.com/questions/4733847/… -- 因为ios8是苹果允许的
    • 您必须从 mac dylib 开始并将其更改为 ios & arm64 即可。这个问题应该回答它。如果您需要更多帮助,请在此处提出专门的问题。由于时间限制,我无法为您提供帮助
    【解决方案2】:

    实际上,从技术上讲,是的,你可以,但不是你想的那样。

    如果它来自 Android,它可能是为 ARM 编译的。所以它应该与 iOS 设备中的 ARM CPU 二进制兼容。但是,iOS 并没有使用通常的共享对象格式(即 ELF 格式),而是 iOS 和 OS X 自己的 Mach-O 格式。

    这意味着您不能直接链接到此共享对象文件,也不能直接将其传递给dlopen()dlsym()。您必须进行认真的黑客攻击(您可能不知道)。这涉及正确加载和重新定位文件。

    在 iOS 越狱开发者和黑客 Comex's GitHub repository Frash 中可以找到这方面的一个示例,这是一个用于越狱 iOS 设备的 Flash 播放器。 Comex 基本上为 iOS 编写了一个 ELF 加载器模块(称为“食物”),并用它来使 Android 的 libflashplayer.so 在 iOS 上工作。很整洁吧?

    另请注意,这对于 AppStore 应用程序来说是不可能的,因为它需要动态加载和操作系统中的各种更改。

    【讨论】:

    • 太好了!谢谢你。我不需要将其推送到应用商店,所以这对我来说应该很有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    • 2011-10-27
    • 2019-04-23
    • 1970-01-01
    • 2014-04-30
    相关资源
    最近更新 更多