我已经获得了一个共享对象文件(.so)及其中的函数,但我不知道如何使用它,或者改变它以便在iOS应用程序中使用。有人能指出我正确的方向吗?
我知道.so来自Android应用程序,但我被告知我也可以在iOS应用程序中使用它。
答案 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的答案),但对于任何实际问题,答案都是否定的