Odpowiedzi:
Inną opcją jest lipo
; jego wyjście jest krótkie i bardziej czytelne niż otool
to.
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
%
file
prawdopodobnie ci powie. otool
z 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
file
często zawodzi.
Jak wspomniano wcześniej, file
nie zawsze działa. otool -hv -arch all
jest 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 objdump
moż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. gobjdump
Zamiast objdump
). Dla wygody możesz chcieć utworzyć alias.