puddletag mp3tag easytag linux 32bit-64bit archive

linux - easytag - mp3tag ubuntu



En LINUX determinar si una.a biblioteca/archivo de 32 bits o 64 bits? (5)

Distribuimos en Linux una lib estática tanto en versiones de 64 bits como de 32 bits. Al resolver problemas con un cliente, me gustaría que mi script de shell de diagnóstico elimine rápidamente el problema al verificar el archivo .a para determinar si es de 32 o 64 bits. Los métodos que se me ocurren son menos que elegantes:

  1. extraer un miembro .o y preguntar el comando "archivo" (por ejemplo, ELF de 32 bits, etc.)

  2. comience a incluir un miembro ficticio codificado para indicar, por ejemplo, 32bit.o / 64bit.o y use "ar -t" para verificar

He intentado "strings xyz.a | grep 32" pero esto no funciona bien con las versiones. No es un problema de rompecorazones, pero si conoces una solución elegante, me gustaría saberlo.


¡Uy, ese sed perdido significa que se mostraba a muchos artículos.

Solo en una respuesta:

count=$(nm foo.a | grep ''^0'' | head -1 | sed ''s/ .*//'' | wc -c) ((count == 17)) && echo 64bit ((count == 9)) && echo 32bit ((count == 0)) && echo ''??bit''

Cómo se supone que debe funcionar:

  • nm - obtener los símbolos de la biblioteca
  • grep: obtiene líneas que comienzan con una cadena hexadecimal (dirección del símbolo en el archivo)
  • head - obtener la primera línea
  • sed: elimina todo lo que haya pasado el espacio en blanco, incluido el espacio en blanco
  • wc: cuente el número de caracteres.

En un entorno de 32 bits, obtienes direcciones compuestas por 8 dígitos hexadecimales, agregando que la nueva línea te da 9 , en un entorno de 64 bits, obtienes direcciones compuestas por 16 dígitos hexadecimales, agregando que la nueva línea te da 17 .


La forma más simple es usar el comando de archivo.

$file <.so file or .a file>


Si hay funciones que son específicas de una versión particular, puede probar nm y luego grep para la función.


Simplemente use el comando de archivo; es decir, file library.so


objdump parece la mejor manera:

objdump -f libfoo.a | grep ^architecture