Jawaban:
Pilihan lain adalah lipo; outputnya singkat dan lebih mudah dibaca daripada otool.
Sebuah contoh:
% 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
%
filemungkin akan memberitahumu. otooltentunya harus bisa. Tapi saya akan coba filedulu, mis
logan:/Users/logan% file d2
d2: Mach-O executable ppc
Contoh dengan arsip:
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
filesering gagal.
Seperti disebutkan sebelumnya, filetidak selalu berhasil. otool -hv -arch allmungkin adalah hal terdekat yang dijamin berfungsi - ini memberikan informasi arsitektur untuk setiap file objek tunggal di perpustakaan.
Contoh:
% otool -hv /sw/lib/libfftw3.a
Arsip: /sw/lib/libfftw3.a
/sw/lib/libfftw3.a(align.o):
Tajuk mach
magic cputype cpusubtype membatasi filetype ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 ALL 0x00 OBJECT 3 336 SUBSECTIONS_VIA_SYMBOLS
/sw/lib/libfftw3.a(alloc.o):
Tajuk mach
magic cputype cpusubtype membatasi filetype ncmds sizeofcmds flags
MH_MAGIC_64 X86_64 ALL 0x00 OBJECT 3 416 SUBSECTIONS_VIA_SYMBOLS
...
Sebagai alternatif, saya temukan objdumpbisa bekerja dengan baik. Sebagai contoh, di lingkungan saya, saya membangun arsip perpustakaan dengan vxWorks dan perlu menghubungkannya dengan proyek lain. Untuk menguji apakah arsipnya adalah arsitektur yang benar, saya dapat melakukan sesuatu seperti berikut (sintaks 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;
Contoh ini tidak tepat benar, karena beberapa baris DO muncul yang tidak mengatakan elf32-sparc-vxworks, tetapi cukup mudah untuk mengadaptasi ini.
Satu manfaat yang bagus dari hal ini adalah bahwa objdump, atau varian yang bernama serupa, diinstal pada kebanyakan sistem operasi * nix, sedangkan alat yang disarankan dalam respons lain tidak.
sunting Terjadi pada saya OP bertanya pada OSX. Permintaan maaf saya.
objdumpAnda dapat menginstal Binutils GNU melalui MacPorts. Untuk melihat semua arsitektur yang tersedia, jalankan saja port search binutils. Alat untuk pengembangan asli diawali untuk menghindari konflik (misalnya, gobjdumpbukan objdump). Anda mungkin ingin membuat alias untuk kenyamanan.
Skrip bash ini akan membantu Anda secara pemrograman mendapatkan daftar arsitektur ke dalam variabel.
list_archs.sh:
#! /bin/bash
lipo -info $1 | sed -En -e 's/^(Non-|Architectures in the )fat file: .+( is architecture| are): (.*)$/\3/p'
Contoh penggunaan:
./list_archs.sh /usr/lib/libc.dylib
x86_64 i386