Respostas:
Outra opção é lipo; sua saída é breve e mais legível que otoola.
Um exemplo:
% 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
%
fileprovavelmente lhe dirá. otoolcertamente deve ser capaz. Mas eu tentaria fileprimeiro, por exemplo
logan:/Users/logan% file d2
d2: Mach-O executable ppc
Exemplo com arquivo:
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
filemuitas vezes falha.
Como mencionado anteriormente, filenem sempre funciona. otool -hv -arch allé provavelmente a coisa mais próxima que é garantida que funcione - fornece informações de arquitetura para cada arquivo de objeto na biblioteca.
Exemplo:
% otool -hv /sw/lib/libfftw3.a
Arquivo: /sw/lib/libfftw3.a
/sw/lib/libfftw3.a(align.o):
Cabeçalho mach
tipo de código mágico cpusubtype caps tipo de arquivo ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 ALL ALL 0x00 OBJECT 3 336 SUBSECTIONS_VIA_SYMBOLS
/sw/lib/libfftw3.a(alloc.o):
Cabeçalho mach
tipo de código mágico cpusubtype caps tipo de arquivo ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 ALL ALL 0x00 OBJECT 3 416 SUBSECTIONS_VIA_SYMBOLS
...
Como alternativa, eu descobri que objdumppode funcionar bem. Como exemplo, no meu ambiente, construo arquivos de biblioteca com o vxWorks e preciso vinculá-los a outros projetos. Para testar se o arquivamento é a arquitetura correta, eu poderia fazer algo como o seguinte (sintaxe do 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;
Este exemplo não é precisamente correto, porque algumas linhas aparecem que não dizem elf32-sparc-vxworks, mas é fácil o suficiente para adaptar isso.
Uma boa vantagem disso é que objdump, ou uma variante com nome semelhante, é instalada na maioria dos sistemas operacionais * nix, enquanto as ferramentas sugeridas em outras respostas não.
edit Apenas me ocorreu que o OP estava perguntando no OSX. Me desculpe.
objdumpvocê pode instalar o GNU Binutils via MacPorts. Para ver todas as arquiteturas disponíveis, basta executar port search binutils. As ferramentas para o desenvolvimento nativo são prefixadas para evitar conflitos (por exemplo, em gobjdumpvez de objdump). Você pode criar um alias por conveniência.
Esse script bash o ajudará programaticamente a obter uma lista de arquiteturas em uma variável.
list_archs.sh:
#! /bin/bash
lipo -info $1 | sed -En -e 's/^(Non-|Architectures in the )fat file: .+( is architecture| are): (.*)$/\3/p'
Exemplo de uso:
./list_archs.sh /usr/lib/libc.dylib
x86_64 i386