Как определить целевую архитектуру статической библиотеки (.а) на Mac OS X?
Я заинтересован в проверке, если данный iPhone статическая библиотека была построена для ARM или Intel.
Это больше любопытство, чем что-либо. Есть ли какой-то конкретный инструмент Mac OS X или BSD для этого? Этот пост дает пример в Linux.
5 ответов:
другой вариант:
lipo
; его вывод является кратким и более читабельным, чемotool
' s.пример:
% 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
вероятно, сказать вам.otool
конечно, надо уметь. Но я бы попробовалfile
первый, например,logan:/Users/logan% file d2 d2: Mach-O executable ppc
пример с архивом:
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
не всегда срабатывает.otool -hv -arch all
это, вероятно, самая близкая вещь, которая гарантированно работает - она дает информацию об архитектуре для каждого отдельного объектного файла в библиотеке.пример:
% otool -hv /sw/lib/libfftw3.a Archive : /sw/lib/libfftw3.a /sw/lib/libfftw3.a(align.o): Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 X86_64 ALL 0x00 OBJECT 3 336 SUBSECTIONS_VIA_SYMBOLS /sw/lib/libfftw3.a(alloc.o): Mach header magic cputype cpusubtype caps filetype ncmds sizeofcmds flags MH_MAGIC_64 X86_64 ALL 0x00 OBJECT 3 416 SUBSECTIONS_VIA_SYMBOLS ...
в качестве альтернативы, я нашел
objdump
может работать хорошо. Например, в моей среде я создаю библиотечные архивы с помощью vxWorks и должен связать их с другими проектами. Чтобы проверить, является ли архив правильной архитектурой, я мог бы сделать что-то вроде следующего (синтаксис 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;
этот пример не совсем корректен, потому что некоторые строки показывают, что не говорят elf32-sparc-vxworks, но это достаточно легко адаптировать.
одно славное преимущество это то, что
objdump
, или аналогично названный вариант, установлен на большинстве операционных систем *nix, в то время как инструменты, предлагаемые в других ответах, нет.edit мне просто пришло в голову, что ОП спрашивал на OSX. Мое извинение.