Réponses:
Une autre option est lipo; sa sortie est brève et plus lisible que celle otoolde.
Un exemple:
% 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
%
filevous le dira probablement. otooldevrait certainement être en mesure de le faire. Mais j'essaierais d' fileabord, par exemple
logan:/Users/logan% file d2
d2: Mach-O executable ppc
Exemple avec archive:
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échoue souvent.
Comme mentionné précédemment, filene fonctionne pas toujours. otool -hv -arch allest probablement la chose la plus proche qui est garantie de fonctionner - il donne des informations d'architecture pour chaque fichier objet de la bibliothèque.
Exemple:
% otool -hv /sw/lib/libfftw3.a
Archive: /sw/lib/libfftw3.a
/sw/lib/libfftw3.a(align.o):
Tête de Mach
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 TOUS 0x00 OBJET 3336 SUBSECTIONS_VIA_SYMBOLS
/sw/lib/libfftw3.a(alloc.o):
Tête de Mach
magic cputype cpusubtype caps filetype ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 TOUS 0x00 OBJET 3416 SUBSECTIONS_VIA_SYMBOLS
...
Comme alternative, j'ai trouvé que objdumpcela fonctionnait bien. Par exemple, dans mon environnement, je construis des archives de bibliothèque avec vxWorks et je dois les lier à d'autres projets. Pour tester si l'archive est la bonne architecture, je pourrais faire quelque chose comme ce qui suit (syntaxe 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;
Cet exemple n'est pas exactement correct, car certaines lignes apparaissent qui ne disent pas elf32-sparc-vxworks, mais il est assez facile d'adapter cela.
Un avantage intéressant de ceci est que objdump, ou une variante du même nom, est installée sur la plupart des systèmes d'exploitation * nix, alors que les outils suggérés dans d'autres réponses ne le sont pas.
edit Il m'est venu à l'esprit que l'OP demandait sur OSX. Mes excuses.
objdumpvous pouvez installer GNU Binutils via MacPorts. Pour voir toutes les architectures disponibles, exécutez simplement port search binutils. Les outils de développement natif sont préfixés pour éviter les conflits (par exemple gobjdumpau lieu de objdump). Vous pouvez créer un alias pour plus de commodité.
Ce script bash vous aidera à obtenir par programme une liste d'architectures dans une variable.
list_archs.sh:
#! /bin/bash
lipo -info $1 | sed -En -e 's/^(Non-|Architectures in the )fat file: .+( is architecture| are): (.*)$/\3/p'
Exemple d'utilisation:
./list_archs.sh /usr/lib/libc.dylib
x86_64 i386