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
%
file
mungkin akan memberitahumu. otool
tentunya harus bisa. Tapi saya akan coba file
dulu, 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
file
sering gagal.
Seperti disebutkan sebelumnya, file
tidak selalu berhasil. otool -hv -arch all
mungkin 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 objdump
bisa 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.
objdump
Anda 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, gobjdump
bukan 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