2010-09-18 19 views
20

我有一個.a文件,我想從中獲取架構信息。運行file myFile.a結果在file.a: current ar archive。如何獲得更多關於該文件包含哪些體系結構的信息?如何獲得'.a'文件的體系結構?

回答

30

您也可以跳過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 $ 

如果相關,可以從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 

即輸出爲libxslt.a目標文件一個,但它給每個文件相同的信息。

+1

建議在該列表中添加'Machine'。這將包括目標文件所針對的特定CPU的信息,而不僅僅是32位或64位等等。 – cHao 2010-09-18 04:46:46

+0

@cHao:是的,我也想到了。我正在做另一個編輯(並且我添加了'readelf -h'的整個輸出)。 – eldarerathis 2010-09-18 04:50:20

+0

謝謝!這正是我所期待的。 – Mike 2010-09-18 04:52:22

2

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

從歸檔中提取的目標文件,並用文件(1),納米(1)等

+0

有沒有任何方法可以在不提取其內容的情況下獲取架構信息(至少不會留下任何殘留物)? – Mike 2010-09-18 04:32:48

+0

沒有<填充物讓你快樂> – jer 2010-09-18 04:33:56

+0

@jer,實際上,你可以用'readelf'或'objdump'來完成。 – 2010-09-18 04:47:04

5

objdump是另一種選擇:

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

使用

脂-info libExample.a

這將是誰的架構是建立。其他功能,如otool或文件不會給出確切的答案,有時它會冗長以獲取正確的信息。

+2

lipo似乎是特定於OS X的。 – MetalGodwin 2015-11-16 10:11:47

0

我會建議使用objdump而不是lipo。 objdump提供比lipo更詳細的信息。