У меня есть файл .a, из которого я хочу получить информацию о архитектуре. Выполнение file myFile.a
приводит к file.a: current ar archive
. Как получить дополнительную информацию о том, какая архитектура содержит файл?
Как я могу получить архитектуру файла .a?
Ответ 1
Вы также можете пропустить команду 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 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
, но он дает ту же информацию для каждого файла.
Ответ 2
Используйте
lipo -info libExample.a
Он будет тем, для кого он построен. Другие функции, такие как otool или файл, не дают точного ответа, а иногда и для подробного получения правильной информации.
Ответ 3
objdump
- это еще один вариант:
objdump -a file.a|grep 'file format'
Ответ 4
извлечь объектные файлы из архива и проверить их с помощью файла (1), nm (1) и т.д.
Ответ 5
Я бы предложил использовать objdump вместо lipo. objdump предоставляет подробную информацию, чем липо.