Android上ARM本地庫是如何運行在其他CPU架構上的?
01-04
一般為了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所支持的所有語法的測試用例?
※關於局部數組和全局數組的運行效率?