在 LINUX 中确定 .a 库/存档是 32 位还是 64 位?
我们在 Linux 中分发了 64 位和 32 位版本的静态库。在为客户排除故障时,我希望我的诊断 shell 脚本能够通过检查 .a 存档文件以确定它是 32 位还是 64 位来快速消除问题。我想到的方法不太优雅:
提取.o成员并询问“文件”命令(例如,ELF 32位等)
开始包括编码为指示的虚拟成员,例如 32bit.o/64bit.o 并使用“ar -t”来检查
我已经尝试过“strings xyz.a | grep 32”,但这在版本上效果不佳。这不是一个令人心碎的问题,但如果你知道一个优雅的解决方案,我想知道。
We distribute in Linux a static lib in both 64-bit and 32-bit versions. When troubleshooting a customer, I would like my diagnostic shell script to quickly eliminate the issue by checking the .a archive file to detetmine whether it is 32 or 64 bit. The methods that occur to me are less than elegant:
extract a .o member and ask the "file" command (e.g., ELF 32-bit etc)
start including a dummy member coded to indicate, e.g. 32bit.o/64bit.o and use "ar -t" to check
I have tried "strings xyz.a | grep 32" but this doesn't work well over versions. Not a heartbreaker problem, but if you know of an elegant solution, I would like to know.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
objdump 似乎是最好的方法:
objdump
seems like the best way:最简单的方法是使用 file 命令。
The simplest way is to use the file command.
只需使用文件命令即可;即
文件library.so
Just use the file command; i.e.
file library.so
只是一个答案:
它应该如何工作:
在 32 位环境中,您将获得由 8 个十六进制数字组成的地址,添加新行将得到
9
,在 64 位环境中,您将获得由 16 个十六进制数字组成的地址,添加新行给你17
。Just in an answer:
How it's supposed to work:
In a 32 bit environment, you get addresses made up of 8 hex digits, adding the new line gives you
9
, In a 64bit environment, you get addresses made up of 16 hex digits, adding the new line gives you17
.如果有特定于特定版本的函数,您可以尝试 nm 然后 grep 来查找该函数。
If there are functions that are specific to a particular version you could try nm then grep for the function.