Відповіді:
Ще один варіант lipo
; його результат короткий і легший для читання, ніжotool
's.
Приклад:
% lipo -info /usr/lib/libiodbc.a
Architectures in the fat file: /usr/lib/libiodbc.a are: x86_64 i386 ppc
% lipo -info libnonfatarchive.a
input file libnonfatarchive.a is not a fat file
Non-fat file: libnonfatarchive.a is architecture: i386
%
file
напевно, вам скажу. otool
безумовно, треба вміти. Але спробував би file
спершу, наприклад
logan:/Users/logan% file d2
d2: Mach-O executable ppc
Приклад з архівом:
logan:/Users/logan% file /usr/lib/libMallocDebug.a
/usr/lib/libMallocDebug.a: Mach-O universal binary with 2 architectures
/usr/lib/libMallocDebug.a (for architecture i386): current ar archive random library
/usr/lib/libMallocDebug.a (for architecture ppc): current ar archive
file
часто не вдається.
Як було сказано раніше, file
не завжди працює.otool -hv -arch all
це, мабуть, найближче, що гарантовано працює - це дає архітектурну інформацію для кожного окремого файлу в бібліотеці.
Приклад:
% otool -hv /sw/lib/libfftw3.a Архів: /sw/lib/libfftw3.a /sw/lib/libfftw3.a(align.o): Заголовок Маха магія cputype cpusubtype caps filetype ncmds sizeofcmds прапори MH_MAGIC_64 X86_64 ВСІ 0x00 ОБ'ЄКТ 3 336 ПІДСУМКИ_VIA_SYMBOLS /sw/lib/libfftw3.a(alloc.o): Заголовок Маха магія cputype cpusubtype caps filetype ncmds sizeofcmds прапори MH_MAGIC_64 X86_64 ВСІ 0x00 ОБ'ЄКТ 3 416 ПІДСУМКИ_VIA_SYMBOLS ...
Як альтернатива, я виявив, objdump
може добре працювати. Наприклад, в моєму середовищі я будую бібліотечні архіви з vxWorks і мені потрібно пов’язати їх з іншими проектами. Щоб перевірити правильність архіву в архіві, я міг би зробити щось на кшталт наступного (синтаксис bash):
if [ "$(objdumpsparc -a ${ARCHIVE_FILE} 2>&1 | ggrep -cvP 'elf32-sparc-vxworks')" -ne "0" ]; then
echo "Cannot build with ${ARCHIVE_FILE}, it contains one or more non-sparc components"
fi;
Цей приклад не зовсім коректний, оскільки деякі рядки DO відображаються, що не говорять про elf32-sparc-vxworks, але досить легко це адаптувати.
Одним із приємних переваг цього є те objdump
, що або подібний варіант, встановлений у більшості операційних систем * nix, тоді як інструменти, запропоновані в інших відповідях, не є.
редагувати Мені просто прийшло в голову, що ОП запитував на OSX. Мої вибачення.
objdump
можна встановити GNU Binutils через MacPorts. Щоб побачити всі доступні архітектури, просто виконайте port search binutils
. Інструменти для власного розвитку мають префікс, щоб уникнути конфліктів (наприклад, gobjdump
замість них objdump
). Ви можете створити псевдонім для зручності.
Цей сценарій bash допоможе вам програмно отримати список архітектури в змінну.
list_archs.sh:
#! /bin/bash
lipo -info $1 | sed -En -e 's/^(Non-|Architectures in the )fat file: .+( is architecture| are): (.*)$/\3/p'
Приклад використання:
./list_archs.sh /usr/lib/libc.dylib
x86_64 i386