Odpowiedzi:
Inną opcją jest lipo; jego wyjście jest krótkie i bardziej czytelne niż otoolto.
Przykład:
% 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
%
fileprawdopodobnie ci powie. otoolz pewnością powinien móc. Ale najpierw spróbuję file, np
logan:/Users/logan% file d2
d2: Mach-O executable ppc
Przykład z archiwum:
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
fileczęsto zawodzi.
Jak wspomniano wcześniej, filenie zawsze działa. otool -hv -arch alljest prawdopodobnie najbliższą rzeczą, która na pewno zadziała - dostarcza informacji o architekturze dla każdego pliku obiektowego w bibliotece.
Przykład:
% otool -hv /sw/lib/libfftw3.a
Archiwum: /sw/lib/libfftw3.a
/sw/lib/libfftw3.a(align.o):
Nagłówek Macha
magic cputype cpusubtype kapsle typu filetype ncmds sizeofcmds flagi
MH_MAGIC_64 X86_64 ALL 0x00 OBJECT 3336 SUBSECTIONS_VIA_SYMBOLS
/sw/lib/libfftw3.a(alloc.o):
Nagłówek Macha
magic cputype cpusubtype kapsle typu filetype ncmds sizeofcmds flagi
MH_MAGIC_64 X86_64 ALL 0x00 OBJECT 3416 SUBSECTIONS_VIA_SYMBOLS
...
Odkryłem, że jako alternatywa objdumpmoże działać dobrze. Na przykład w swoim środowisku tworzę archiwa bibliotek za pomocą vxWorks i muszę je łączyć z innymi projektami. Aby sprawdzić, czy archiwum jest poprawną architekturą, mógłbym zrobić coś takiego (składnia 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;
Ten przykład nie jest do końca poprawny, ponieważ pojawiają się pewne wiersze, które nie mówią elf32-sparc-vxworks, ale łatwo jest to dostosować.
Jedną z fajnych korzyści jest to objdump, że lub podobnie nazwany wariant jest instalowany w większości systemów operacyjnych * nix, podczas gdy narzędzia sugerowane w innych odpowiedziach nie.
edytuj Po prostu przyszło mi do głowy, że OP pyta na OSX. Przepraszam.
objdump, możesz zainstalować GNU Binutils przez MacPorts. Aby zobaczyć wszystkie dostępne architektury, po prostu wykonaj port search binutils. Narzędzia do programowania natywnego są poprzedzone, aby uniknąć konfliktów (np. gobjdumpZamiast objdump). Dla wygody możesz chcieć utworzyć alias.