Linux 如何获得“.a”文件的架构?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3740379/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-04 23:12:23  来源:igfitidea点击:

How can I get the architecture of a '.a' file?

linuxelf

提问by Mike

I have a .a file from which I want to get architecture information. Running file myFile.aresults in file.a: current ar archive. How can I get more information on what architecture the file contains?

我有一个 .a 文件,我想从中获取架构信息。运行file myFile.a结果在file.a: current ar archive. 如何获取有关文件包含的架构的更多信息?

采纳答案by eldarerathis

You can also skip the arcommand and use readelf, via something like:

您还可以跳过ar命令并使用readelf,通过以下方式:

readelf -h <archive>.a | grep 'Class\|File\|Machine'

readelf -h <archive>.a | grep 'Class\|File\|Machine'

[00:32:15] /usr/lib $ readelf -h libxslt.a | grep 'Class\|File\|Machine'
File: libxslt.a(attrvt.o)
  Class:                             ELF32
  Machine:                           Intel 80386
File: libxslt.a(xslt.o)
  Class:                             ELF32
  Machine:                           Intel 80386
... #Trimmed this, it goes on a bit
File: libxslt.a(transform.o)
  Class:                             ELF32
  Machine:                           Intel 80386
File: libxslt.a(security.o)
  Class:                             ELF32
  Machine:                           Intel 80386
[00:32:24] /usr/lib $


In case it's relevant, here's the other information that you can get from readelf -h. I just trimmed the above with grep, obviously:

如果相关,您可以从这里获取其他信息readelf -h。我只是用 修剪了上面的内容grep,显然:

File: libxslt.a(security.o)
ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              REL (Relocatable file)
  Machine:                           Intel 80386
  Version:                           0x1
  Entry point address:               0x0
  Start of program headers:          0 (bytes into file)
  Start of section headers:          2548 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           0 (bytes)
  Number of program headers:         0
  Size of section headers:           40 (bytes)
  Number of section headers:         16
  Section header string table index: 13

That output is for oneof the object files in libxslt.a, but it gives the same information for each file.

这是输出为一个在目标文件libxslt.a,但它给每个文件相同的信息。

回答by msw

http://linux.die.net/man/1/ar

http://linux.die.net/man/1/ar

extract the object files from the archive and inspect them with file(1), nm(1), etc.

从存档中提取目标文件并使用 file(1)、nm(1) 等检查它们。

回答by Matthew Flaschen

objdumpis another option:

objdump是另一种选择:

objdump -a file.a|grep 'file format'

回答by pcbabu

Use

lipo -info libExample.a

lipo -info libExample.a

It will Who the architecture it build for. Other functions like otool or file doesn't give the exact answer and sometimes it to verbose to get the correct information.

它将为谁构建它的架构。otool 或 file 等其他函数没有给出确切的答案,有时它会很冗长以获取正确的信息。

回答by Naseef Ur Rahman

I would suggest using objdump instead of lipo. objdump provides detailed information than lipo.

我建议使用 objdump 而不是 lipo。objdump 提供了比 lipo 更详细的信息。