Interesuje mnie sprawdzenie, czy dana biblioteka statyczna iPhone'a została zbudowana dla ARM lub Intel.
To bardziej ciekawość niż cokolwiek innego. Czy jest do tego jakieś narzędzie specyficzne dla Mac OS X lub BSD? Ten post zawiera przykład w systemie Linux.
file
prawdopodobnie ci powie.otool
z pewnością powinien móc. Ale najpierw spróbujęfile
, npPrzykład z archiwum:
źródło
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:
źródło
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):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.
źródło
objdump
, możesz zainstalować GNU Binutils przez MacPorts. Aby zobaczyć wszystkie dostępne architektury, po prostu wykonajport search binutils
. Narzędzia do programowania natywnego są poprzedzone, aby uniknąć konfliktów (np.gobjdump
Zamiastobjdump
). Dla wygody możesz chcieć utworzyć alias.Ten skrypt bash pomoże ci programowo pobrać listę architektur do zmiennej.
list_archs.sh:
Przykład użycia:
źródło