在iOS中使用共享对象文件(.so文件)

时间:2012-11-28 23:01:49

标签: ios shared-objects

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

我知道.so来自Android应用程序,但我被告知我也可以在iOS应用程序中使用它。

2 个答案:

答案 0 :(得分:7)

实际上和技术上, 是的,你可以, 但不是你想象的方式。

如果它来自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应用程序无法实现这一点,因为它需要动态加载和操作系统中的各种更改。

答案 1 :(得分:3)

虽然技术上可行(参见h2co3的答案),但对于任何实际问题,答案都是否定的

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