如何获得'.a'文件的架构?

Mik*_*ike 26 linux elf

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

eld*_*his 36

您也可以跳过ar命令并使用readelf,例如:

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 $
Run Code Online (Sandbox Code Playgroud)

如果它是相关的,这里是你可以得到的其他信息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
Run Code Online (Sandbox Code Playgroud)

该输出用于其中一个目标文件libxslt.a,但它为每个文件提供相同的信息.

  • 建议将“Machine”添加到那里的列表中。这将包括有关目标文件所针对的特定 CPU 的信息,而不仅仅是它是 32 位还是 64 位或其他什么。 (2认同)

pcb*_*abu 16

使用

lipo -info libExample.a

它将为谁构建的架构.其他功能,如otool或文件不能给出确切的答案,有时它会详细说明以获取正确的信息.

  • lipo似乎是OS X特有的. (2认同)

Mat*_*hen 8

objdump 是另一种选择:

objdump -a file.a|grep 'file format'
Run Code Online (Sandbox Code Playgroud)

  • 通过此解决方案无法获取架构信息(例如arm、x86等)。 (2认同)