我得到了一个共享对象文件 (.so) 和其中的函数,但我不知道如何使用它,或者更改它以在 iOS 应用程序中使用。有人能指出我正确的方向吗?
我知道 .so 来自 Android 应用程序,但有人告诉我我也可以让它在 iOS 应用程序中工作。
我得到了一个共享对象文件 (.so) 和其中的函数,但我不知道如何使用它,或者更改它以在 iOS 应用程序中使用。有人能指出我正确的方向吗?
我知道 .so 来自 Android 应用程序,但有人告诉我我也可以让它在 iOS 应用程序中工作。
实际上,从技术上讲,是的,你可以,但不是你想的那样。
如果它来自 Android,它可能是为 ARM 编译的。所以它应该与 iOS 设备中的 ARM CPU 二进制兼容。但是,iOS 并没有使用通常的共享对象格式(即 ELF 格式),而是 iOS 和 OS X 自己的 Mach-O 格式。
这意味着您不能直接链接到此共享对象文件,也不能将其直接传递给dlopen()
and dlsym()
。您必须进行认真的黑客攻击(您可能不知道)。这涉及正确加载和重新定位文件。
这方面的一个例子可以在 iOS 越狱开发者和黑客Comex 的 GitHub 存储库 Frash中找到,这是一个用于越狱 iOS 设备的 Flash 播放器。Comex 实质上为 iOS 编写了一个 ELF 加载器模块(称为“食物”),并使用它使 Android 的 libflashplayer.so 在 iOS 上运行。很整洁吧?
另请注意,这对于 AppStore 应用程序来说是不可能的,因为它需要动态加载和操作系统中的各种更改。
虽然在技术上可行(见 h2co3 的回答),但对于任何实际情况,答案是否定的