【发布时间】:2012-11-16 22:44:30
【问题描述】:
我得到了一个共享对象文件 (.so) 和其中的函数,但我不知道如何使用它,或者更改它以在 iOS 应用程序中使用。有人能指出我正确的方向吗?
我知道 .so 来自 Android 应用程序,但有人告诉我我也可以让它在 iOS 应用程序中工作。
【问题讨论】:
标签: ios shared-objects
我得到了一个共享对象文件 (.so) 和其中的函数,但我不知道如何使用它,或者更改它以在 iOS 应用程序中使用。有人能指出我正确的方向吗?
我知道 .so 来自 Android 应用程序,但有人告诉我我也可以让它在 iOS 应用程序中工作。
【问题讨论】:
标签: ios shared-objects
虽然技术上可行(请参阅 h2co3 的回答),但对于任何实用的问题,答案是否定的
【讨论】:
实际上,从技术上讲,是的,你可以,但不是你想的那样。
如果它来自 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 应用程序来说是不可能的,因为它需要动态加载和操作系统中的各种更改。
【讨论】: