Antworten:
Eine andere Option ist lipo; Die Ausgabe ist kurz und besser lesbar als otooldie.
Ein Beispiel:
% 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
%
filewerde es dir wahrscheinlich sagen. otoolsollte sicherlich in der Lage sein. Aber ich würde es filezuerst versuchen , z
logan:/Users/logan% file d2
d2: Mach-O executable ppc
Beispiel mit Archiv:
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
filescheitert oft.
Wie bereits erwähnt, filefunktioniert nicht immer. otool -hv -arch allist wahrscheinlich das Nächste, was garantiert funktioniert - es liefert Architekturinformationen für jede einzelne Objektdatei in der Bibliothek.
Beispiel:
% otool -hv /sw/lib/libfftw3.a
Archiv: /sw/lib/libfftw3.a
/sw/lib/libfftw3.a(align.o):
Mach Header
magic cputype cpusubtype caps Dateityp ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 ALL 0x00 OBJECT 3 336 SUBSECTIONS_VIA_SYMBOLS
/sw/lib/libfftw3.a(alloc.o):
Mach Header
magic cputype cpusubtype caps Dateityp ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 ALL 0x00 OBJECT 3 416 SUBSECTIONS_VIA_SYMBOLS
...
Als Alternative habe ich festgestellt, objdumpkann gut funktionieren. In meiner Umgebung erstelle ich beispielsweise Bibliotheksarchive mit vxWorks und muss diese mit anderen Projekten verknüpfen. Um zu testen, ob das Archiv die richtige Architektur hat, könnte ich Folgendes tun (Bash-Syntax):
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;
Dieses Beispiel ist nicht genau richtig, da einige Zeilen angezeigt werden, die nicht elf32-sparc-vxworks sagen, aber es ist einfach genug, dies anzupassen.
Ein netter Vorteil davon ist, dass objdumpoder eine ähnlich benannte Variante auf den meisten * nix-Betriebssystemen installiert ist, während Tools, die in anderen Antworten vorgeschlagen werden, dies nicht sind.
edit Mir ist gerade eingefallen, dass das OP unter OSX gefragt hat. Entschuldigen Sie.
objdumpSie die GNU Binutils über MacPorts installieren. Um alle verfügbaren Architekturen zu sehen, führen Sie sie einfach aus port search binutils. Den Tools für die native Entwicklung wird ein Präfix vorangestellt, um Konflikte zu vermeiden (z . B. gobjdumpanstelle von objdump). Möglicherweise möchten Sie der Einfachheit halber einen Alias erstellen.
Mit diesem Bash-Skript können Sie programmgesteuert eine Liste von Architekturen in eine Variable umwandeln.
list_archs.sh:
#! /bin/bash
lipo -info $1 | sed -En -e 's/^(Non-|Architectures in the )fat file: .+( is architecture| are): (.*)$/\3/p'
Anwendungsbeispiel:
./list_archs.sh /usr/lib/libc.dylib
x86_64 i386