Distribuimos en Linux una biblioteca estática en versiones de 64 y 32 bits. Al solucionar problemas de un cliente, me gustaría que mi script de shell de diagnóstico elimine rápidamente el problema comprobando el archivo .a para determinar si es de 32 o 64 bits. Los métodos que se me ocurren son menos que elegantes:
extraer un miembro .o y pedir el comando "archivo" (por ejemplo, ELF de 32 bits, etc.)
comience a incluir un miembro ficticio codificado para indicar, por ejemplo, 32bit.o / 64bit.o y use "ar -t" para verificar
He probado "strings xyz.a | grep 32" pero esto no funciona bien en versiones. No es un problema rompecorazones, pero si conoces una solución elegante, me gustaría saberlo.
linux
32bit-64bit
archive
cvsdave
fuente
fuente
Respuestas:
objdump
parece la mejor manera:fuente
file
es más fácil de leer como se indica a continuación stackoverflow.com/a/8909086/233906architecture: i386:x86-64, flags 0x00000039:
... ¿significa que son ambos ...? eso es poco probable. por favor ayuda: Di386
(IA32 antiguo simple),i386:x86-64
(AMD64) yi386:x64-32
(la arquitectura X32 de 32 bits, espacio de direcciones en modo largo).objdump -f lib.a | grep ^architecture | cut -d' ' -f-2 | sort -u
:)La forma más sencilla es utilizar el comando de archivo.
fuente
file armeabi/libpique.so
->libpique.so: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /system/bin/linker, stripped
. (2)file x86/libpique.so
->libpique.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
Simplemente use el comando de archivo; es decir
file library.so
fuente
Solo en una respuesta:
Cómo se supone que funciona:
En un entorno de 32 bits, obtiene direcciones compuestas por 8 dígitos hexadecimales, al agregar la nueva línea obtendrá
9
, En un entorno de 64 bits, obtiene direcciones compuestas por 16 dígitos hexadecimales, al agregar la nueva línea obtendrá17
.fuente
Si hay funciones que son específicas de una versión en particular, puede probar nm y luego grep para la función.
fuente