versiones usa ultima pro precio macbook mac computadora apple actualizacion iphone macos linker bsd

iphone - usa - ¿Cómo determino la arquitectura de destino de la biblioteca estática(.a) en Mac OS X?



macbook pro (5)

Estoy interesado en verificar si se ha creado una biblioteca estática de iPhone para ARM o Intel.

Es más curiosidad que nada. ¿Hay algún tipo de herramienta específica Mac OS X o BSD para hacer esto? Esta post da un ejemplo en Linux.


Como alternativa, he encontrado que objdump puede funcionar bien. Como ejemplo, en mi entorno construyo archivos de biblioteca con vxWorks y necesito vincularlos con otros proyectos. Para probar si el archivo es la arquitectura correcta, podría hacer algo como lo siguiente (sintaxis 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;

Este ejemplo no es precisamente correcto, porque algunas líneas aparecen que no dicen elf32-sparc-vxworks, pero es bastante fácil adaptar esto.

Una buena ventaja de esto es que objdump , o una variante de nombre similar, está instalada en la mayoría de los sistemas operativos * nix, mientras que las herramientas sugeridas en otras respuestas no lo son.

editar Simplemente se me ocurrió que el OP preguntaba por OSX. Mis disculpas.


Como se mencionó anteriormente, el file no siempre funciona. otool -hv -arch all es probablemente lo más cercano que se garantiza que funciona: proporciona información de arquitectura para cada archivo de objeto individual en la biblioteca.

Ejemplo:

% 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 ...


Este script bash te ayudará a obtener programáticamente una lista de arquitecturas en una variable.

list_archs.sh:

#! /bin/bash lipo -info $1 | sed -En -e ''s/^(Non-|Architectures in the )fat file: .+( is architecture| are): (.*)$//3/p''

Ejemplo de uso:

./list_archs.sh /usr/lib/libc.dylib x86_64 i386


file probablemente te diga sin otool , el otool debería ser capaz de hacerlo. Pero trataría de file primero, por ejemplo

logan:/Users/logan% file d2 d2: Mach-O executable ppc

Ejemplo con archivo:

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


Otra opción es lipo ; su salida es breve y más legible que las de otool .

Un ejemplo:

% 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 %