Ответы:
Другой вариант lipo; его вывод краток и более читабелен, чем otoolего.
Пример:
% 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):
Заголовок Маха
magic caucepe cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 ВСЕ 0x00 ОБЪЕКТ 3 336 ПОДСЕКЦИЙ_VIA_SYMBOLS
/sw/lib/libfftw3.a(alloc.o):
Заголовок Маха
magic caucepe cpusubtype caps filetype ncmds sizeofcmds flags
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;
Этот пример не совсем правильный, потому что некоторые строки ДЕЙСТВИТЕЛЬНО появляются, в которых не говорится elf32-sparc-vxworks, но это достаточно легко адаптировать.
Одним из приятных преимуществ этого является то objdump, что вариант с аналогичным названием установлен в большинстве операционных систем * nix, тогда как инструменты, предложенные в других ответах, нет.
edit Мне только что пришло в голову, что OP спрашивал о 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