I have a .a file from which I want to get architecture information. Running file myFile.a
results in file.a: current ar archive
. How can I get more information on what architecture the file contains?
views:
41answers:
3
A:
extract the object files from the archive and inspect them with file(1), nm(1), etc.
msw
2010-09-18 04:29:42
Is there any way to get architecture information without extracting its contents(at least without leaving any residue behind)?
Mike
2010-09-18 04:32:48
No.<filler to make SO happy>
jer
2010-09-18 04:33:56
@jer, actually, you can do it with either `readelf` or `objdump`.
Matthew Flaschen
2010-09-18 04:47:04
@Matthew, Sorry, my mind was in OSX/iOS mode i'd been answering those questions all night, and didn't read the tag closely enough. Yeah, you are correct. Neither of those tools exist in osx's dev tools (one doesn't make sense on that platform anyway).
jer
2010-09-18 06:22:41
+4
A:
You can also skip the ar
command and use readelf, via something like:
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:
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 one of the object files in libxslt.a
, but it gives the same information for each file.
eldarerathis
2010-09-18 04:34:12
Recommend adding `Machine` to the list there. That'll include info on the specific CPU the object files are made for, rather than just whether it's 32 or 64 bit or whatever.
cHao
2010-09-18 04:46:46
@cHao: Yeah, I just thought of that, too. I'm doing another edit (and I added the entire output of `readelf -h`).
eldarerathis
2010-09-18 04:50:20
+1
A:
objdump
is another option:
objdump -a file.a|grep 'file format'
Matthew Flaschen
2010-09-18 04:45:45