微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在LINUX中,确定.a库/归档是32位还是64位?

如何解决在LINUX中,确定.a库/归档是32位还是64位?

| 我们在Linux中分发了64位和32位版本的静态库。在对客户进行故障排除时,我希望我的诊断Shell脚本通过检查.a存档文件来确定是32位还是64位来快速消除此问题。我想到的方法并不优雅: 提取一个.o成员并询问\“ file \”命令(例如,ELF 32位等) 开始包括被编码以指示例如32bit.o / 64bit.o并使用\“ ar -t \”进行检查 我已经尝试过\“ strings xyz.a | grep 32 \”,但这在所有版本中都无法正常工作。这不是令人心碎的问题,但是如果您知道一个优雅的解决方案,我想知道。     

解决方法

objdump
似乎是最好的方法:
objdump -f libfoo.a | grep ^architecture
    ,最简单的方法是使用file命令。
$file <.so file or .a file>
    ,只需使用file命令;即
file library.so
    ,  糟糕,缺少sed意味着它正在显示很多项目。 只是一个答案:
count=$(nm foo.a | grep \'^0\' | head -1 | sed \'s/ .*//\' | wc -c)
((count == 17)) && echo 64bit
((count == 9)) && echo 32bit
((count == 0)) && echo \'??bit\'
应该如何运作: nm-从库中获取符号 grep-获取以十六进制字符串开头的行(文件中符号的地址) 头-得到第一行 sed-删除空格之后的所有内容,包括空格 wc-计算字符数。 在32位环境中,您将获得由8个十六进制数字组成的地址,将新行添加为
9
;在64位环境中,您将获得由16个十六进制数字组成的地址,添加新行将为
17
。     ,如果有特定于特定版本的功能,则可以尝试使用nm然后使用grep作为该功能。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。