2012-11-28 72 views
4

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

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

回答

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

+0

太好了!谢谢。我不需要将它推送到应用商店,所以这对我来说应该很好。 – RileyE

3

虽然在技术上是可行的(见H2CO3的回答)对任何实际的答案是否定的

  • 所以文件的arent在正确的二进制格式
  • 即使他们是,动态加载不被AppStore的
  • 允许
+0

这不是一个真正实用的应用程序。它可能永远处于发展模式,从不会投入生产。尽管它的目的很好! – RileyE

+0

@ Daij-Djan:我们可以看到一些像facebook /(或)的sdk其他的有动态库(.dylib)。我们也可以将它上传到appstore。如何使用xcode创建它? –

+0

请参阅http://stackoverflow.com/questions/4733847/can-you-build-dynamic-libraries-for-ios-and-load-them-at-runtime - 由于ios8允许通过苹果 –

相关问题