2010-09-18 8 views
20

Ho un file .a da cui voglio ottenere informazioni sull'architettura. L'esecuzione dei risultati file myFile.a in file.a: current ar archive. Come posso ottenere maggiori informazioni su quale architettura il file contiene?Come posso ottenere l'architettura di un file '.a'?

risposta

30

Si può anche saltare il comando ar e utilizzare readelf, via qualcosa di simile :

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 $ 

Nel caso sia pertinente, ecco le altre informazioni che è possibile ottenere da readelf -h. Ho appena rifilato quanto sopra con grep, ovviamente:

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 

che l'uscita è per uno dei file oggetto nel libxslt.a, ma dà le stesse informazioni per ogni file.

+1

Raccomanda di aggiungere 'Macchina' all'elenco qui. Ciò include informazioni sulla CPU specifica per cui sono fatti i file oggetto, piuttosto che sul fatto che sia 32 o 64 bit o altro. – cHao

+0

@cHao: Sì, ci ho pensato anche io. Sto facendo un'altra modifica (e ho aggiunto l'intero output di 'readelf -h'). – eldarerathis

+0

Grazie! Questo e 'esattamente quello che stavo cercando. – Mike

2

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

estrarre i file oggetto dall'archivio e li ispezionare con il file (1), nm (1), ecc

+0

C'è un modo per ottenere informazioni sull'architettura senza estrarne il contenuto (almeno senza lasciare residui)? – Mike

+0

No. jer

+0

@jer, in realtà, è possibile farlo con 'readelf' o' objdump'. –

5

objdump è un'altra opzione:

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

Usa

lipo -info libExample.a

Sarà Chi l'architettura è costruire per. Altre funzioni come otool o file non danno la risposta esatta e talvolta a verbose per ottenere le informazioni corrette.

+2

lipo sembra essere specifico per OS X. – MetalGodwin

0

Suggerirei di utilizzare objdump anziché lipo. objdump fornisce informazioni dettagliate rispetto a lipo.

Problemi correlati