Nous distribuons sous Linux une bibliothèque statique dans les versions 64 bits et 32 bits. Lors du dépannage d'un client, j'aimerais que mon script shell de diagnostic élimine rapidement le problème en vérifiant le fichier d'archive .a pour déterminer s'il s'agit de 32 ou 64 bits. Les méthodes qui me viennent à l'esprit sont loin d'être élégantes:
extraire un membre .o et demander la commande "file" (par exemple, ELF 32 bits, etc.)
commencez par inclure un membre factice codé pour indiquer, par exemple 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 qui brise le cœur, mais si vous connaissez une solution élégante, j'aimerais savoir.
la source
Réponses:
objdump
semble être le meilleur moyen:la source
file
est plus facile à lire comme indiqué ci-dessous stackoverflow.com/a/8909086/233906architecture: i386:x86-64, flags 0x00000039:
... cela veut dire que c'est les deux ...? c'est peu probable. s'il vous plaît aider: Di386
(ancien IA32),i386:x86-64
(AMD64) eti386:x64-32
(l'architecture X32 32-bit-address-space-in-long-mode).objdump -f lib.a | grep ^architecture | cut -d' ' -f-2 | sort -u
:)Le moyen le plus simple consiste à utiliser la commande file.
la source
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
Utilisez simplement la commande file; c'est à dire
file library.so
la source
Juste en réponse:
Comment ça marche:
Dans un environnement 32 bits, vous obtenez des adresses composées de 8 chiffres hexadécimaux, l'ajout de la nouvelle ligne vous donne
9
, Dans un environnement 64 bits, vous obtenez des adresses composées de 16 chiffres hexadécimaux, l'ajout de la nouvelle ligne vous donne17
.la source
S'il existe des fonctions spécifiques à une version particulière, vous pouvez essayer nm puis grep pour la fonction.
la source