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

得到如下输出:

MAC查看某一so文件的cpu匹配_第1张图片

可知该so适合于armv5架构。

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

MAC查看某一so文件的cpu匹配_第2张图片

你可能感兴趣的:(Android,项目实战)