Android上ARM本地庫是如何運行在其他CPU架構上的?

一般為了apk包比較小,只放arm的.so文件。那麼其他架構是如何做到兼容的呢?

我能想到的有三種方式:1.模擬運行;2.硬體兼容;3.動態轉換。


Intel的libhoudini就是個arm轉x86的二進位翻譯器,動態轉換的,不需要硬體兼容。

然而,intel的協議是,只能在intel的晶元上運行libhoudini,amd上能跑但不合法。所以有的人誤解為atom裡面有套兼容的指令集。其實根本不是這樣。


x86可以運行armeabi是使用二進位翻譯,有些x86的安卓系統不帶這個功能,比如sdk的x86的 模擬器 image里不帶這個功能。


有一個神奇的libhoudini,大概就是用的動態二進位翻譯


推薦閱讀:

Linux/Unix中查看一個C/C++大工程中所有函數的調用順序,有哪些方法?
編譯器的自舉原理是什麼?
從哪裡可以得到包含了Python3所支持的所有語法的測試用例?
關於局部數組和全局數組的運行效率?

TAG:x86 | 編譯原理 | ARM架構 | CPU指令集 |