【发布时间】:2011-04-14 00:19:01
【问题描述】:
我有一个 .a 文件,我想从中获取架构信息。运行file myFile.a 会产生file.a: current ar archive。如何获得有关文件包含的架构的更多信息?
【问题讨论】:
我有一个 .a 文件,我想从中获取架构信息。运行file myFile.a 会产生file.a: current ar archive。如何获得有关文件包含的架构的更多信息?
【问题讨论】:
您也可以跳过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 中的一个 对象文件,但它为每个文件提供了相同的信息。
【讨论】:
Machine 添加到那里的列表中。这将包括有关创建目标文件的特定 CPU 的信息,而不仅仅是它是 32 位还是 64 位或其他。
readelf -h 的整个输出)。
使用
lipo -info libExample.a
它将为谁构建架构。 otool 或 file 等其他函数没有给出确切的答案,有时它会很冗长以获取正确的信息。
【讨论】:
objdump 是另一种选择:
objdump -a file.a|grep 'file format'
【讨论】:
从存档中提取目标文件并使用 file(1)、nm(1) 等检查它们。
【讨论】:
readelf 或objdump。
我建议使用 objdump 而不是 lipo。 objdump 提供的信息比 lipo 更详细。
【讨论】: