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

时间:2011-04-14 15:00:46

标签: linux 32bit-64bit archive

我们在Linux中分发64位和32位版本的静态库。在对客户进行故障排除时,我希望我的诊断shell脚本通过检查.a存档文件来快速消除问题,以确定它是32位还是64位。我遇到的方法不够优雅:

  1. 提取.o成员并询问“file”命令(例如,ELF 32位等)

  2. 开始包括编码的虚拟成员,以指示例如, 32bit.o / 64bit.o并使用“ar -t”检查

  3. 我试过“字符串xyz.a | grep 32”,但这不适用于版本。这不是一个令人心碎的问题,但如果你知道一个优雅的解决方案,我想知道。

5 个答案:

答案 0 :(得分:103)

objdump似乎是最好的方式:

objdump -f libfoo.a | grep ^architecture

答案 1 :(得分:26)

最简单的方法是使用file命令。

$file <.so file or .a file>

答案 2 :(得分:16)

只需使用file命令;即file library.so

答案 3 :(得分:2)

  

oops,缺少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 - 获取以十六进制字符串开头的行(文件中符号的地址)
  • head - 获取第一行
  • sed - 删除空白处的所有内容,包括空白
  • wc - 计算字符数。

在32位环境中,您获得由8个十六进制数字组成的地址,添加新行提供9,在64位环境中,您获得由16个十六进制数字组成的地址,添加新行给你17

答案 4 :(得分:1)

如果有特定版本的功能,您可以尝试使用nm,然后使用grep来获取该功能。