2012-11-28 100 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允許通過蘋果 –

相關問題