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

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

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

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

我已经尝试过“stringxyz.a | grep 32”,但是这不适用于版本。 不是一个令人心碎的问题,但如果你知道一个优雅的解决scheme,我想知道。

objdump似乎是最好的方法:

 objdump -f libfoo.a | grep ^architecture 

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

 $file <.so file or .a file> 

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

如果有特定版本的函数,则可以尝试nm,然后grep函数。

哎呀,那个缺less的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 – 获取以hexstring开始的行(文件中符号的地址)
  • 头 – 得到第一行
  • sed – 删除包括空格在内的所有内容
  • wc – 计算字符数。

在32位的环境中,你得到的地址由8位hex数字组成,添加新行给你9 ,在64位环境中,你得到的地址由16位hex数字组成,添加新行给你17