Nous distribuons sous Linux une bibliothèque statique dans les versions 64 bits et 32 bits. Lors du dépannage d'un client, je souhaite que mon script de diagnostic Diagnostic élimine rapidement le problème en vérifiant le fichier d'archive .a pour déterminer s'il s'agit du format 32 ou 64 bits. Les méthodes qui me viennent à l'esprit sont moins qu'élégantes:
extraire un membre .o et demander la commande "file" (par exemple, ELF 32 bits, etc.)
commencez à inclure un membre factice codé pour indiquer, par ex. 32bit.o/64bit.o et utilisez "ar -t" pour vérifier
J'ai essayé "strings xyz.a | grep 32" mais cela ne fonctionne pas bien avec les versions. Ce n'est pas un problème, mais si vous connaissez une solution élégante, j'aimerais le savoir.
objdump
semble être le meilleur moyen:
objdump -f libfoo.a | grep ^architecture
Le moyen le plus simple consiste à utiliser la commande de fichier.
$file <.so file or .a file>
Il suffit d'utiliser la commande de fichier; c'est à dire. file library.so
oups, ce sed manquant signifie qu'il affichait de nombreux éléments.
Juste dans une réponse:
count=$(nm foo.a | grep '^0' | head -1 | sed 's/ .*//' | wc -c)
((count == 17)) && echo 64bit
((count == 9)) && echo 32bit
((count == 0)) && echo '??bit'
Comment ça doit fonctionner:
Dans un environnement 32 bits, vous obtenez des adresses composées de 8 chiffres hexadécimaux, ajouter la nouvelle ligne vous donne 9
. Dans un environnement 64 bits, vous obtenez des adresses composées de 16 chiffres hexadécaux, ajouter la nouvelle ligne vous 17
.
Si certaines fonctions sont spécifiques à une version particulière, vous pouvez essayer nm, puis grep pour la fonction.