MAC查看某一so文件的cpu匹配

爲排查在用戶手中的Android設備存在找不到so的問題,需看一下某一so支持什麼CPU格式。熟悉C層庫的同學都知道,C所編譯所得的靜態庫(.a)和動態庫(.so)均爲CPU相關的,不同的CPU環境需運行不同的so。在Android中,可以選用默認的so,即編譯爲armeabi環境的so運行於包括arm v5、arm v7,Intel x86環境。替代將全部CPU的so均打入包中,可能會降低一些性能,但得到的好處是安裝包較小。

好,言歸正傳,拿到一個so後,如何查看其所匹配的CPU呢?答案本身在so中,我們所需做的是使用工具,將該信息從so中讀出。在Mac下,可以通過greadelf和gobjdump兩個命令得到該信息。只是取cpu的話,前述兩命令中的任一個均能實現目標。

打開終端,輸入greadelf,得到如下信息:

-bash: greadelf: command not found

運行gobjdump的結果一樣,原因是Mac環境默認不包含該命令工具。可以選用brew進行安裝

運行下述命令:

brew update

brew install binutils

安裝好之後再次運行greadelf,得到如下信息:

-bash: greadelf: command not found

爲什麼呢?仔細看一下brew install binutils的執行結果,發現有該提示:

If you need to have binutils first in your PATH run:
                echo 'export PATH="/usr/local/opt/binutils/bin:$PATH"' >> ~/.bash_profile

想隨處都可運行該命令,需配置環境變量:

sudo touch ~/.bash_profile (首次配置環境變量,需創建該文件)

sudo vi ~/.bash_profile,編輯環境變量,加入export PATH="/usr/local/opt/binutils/bin:$PATH"

source ~/.bash_profile:啓用該環境變量

好,再次運行greadelf,可以看到的提示配置項,命令配置成功

仔細閱讀配置項,發現如下命令即可:

greadelf -A libCube.so

得到如下輸出:

可知該so適合於armv5架構。

再試一下gobjdump:gobjdump -x libCube.so

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章