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

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值