Wir vertreiben unter Linux eine statische Bibliothek sowohl in 64-Bit- als auch in 32-Bit-Versionen. Bei der Fehlerbehebung bei einem Kunden möchte ich, dass mein Diagnose-Shell-Skript das Problem schnell beseitigt, indem die .a-Archivdatei überprüft wird, um festzustellen, ob es sich um 32- oder 64-Bit handelt. Die Methoden, die mir einfallen, sind weniger als elegant:
Extrahieren Sie ein .o-Mitglied und fragen Sie den Befehl "file" (z. B. ELF 32-Bit usw.).
Beginnen Sie mit der Aufnahme eines Dummy-Elements, das codiert ist, um anzuzeigen, z. B. 32bit.o / 64bit.o, und verwenden Sie "ar-t", um dies zu überprüfen
Ich habe "Strings xyz.a | grep 32" ausprobiert, aber dies funktioniert nicht gut über Versionen. Kein Herzensbrecherproblem, aber wenn Sie eine elegante Lösung kennen, würde ich gerne wissen.
quelle
Antworten:
objdump
scheint der beste Weg zu sein:quelle
file
ist leichter zu lesen, wie unten angegeben stackoverflow.com/a/8909086/233906architecture: i386:x86-64, flags 0x00000039:
verstehe ... bedeutet das, dass es beides ist ...? das ist unwahrscheinlich Bitte helfen Sie: Di386
(einfaches altes IA32),i386:x86-64
(AMD64) undi386:x64-32
(X32-32-Bit-Adressraum-im-Langmodus-Architektur) beschrieben.objdump -f lib.a | grep ^architecture | cut -d' ' -f-2 | sort -u
:)Am einfachsten ist es, den Befehl file zu verwenden.
quelle
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
Verwenden Sie einfach den Befehl file. dh
file library.so
quelle
Nur in einer Antwort:
Wie es funktionieren soll:
In einer 32-Bit-Umgebung erhalten Sie Adressen, die aus 8 hexadezimalen Ziffern bestehen. Wenn Sie die neue Zeile hinzufügen
9
, erhalten Sie Adressen. In einer 64-Bit-Umgebung erhalten Sie Adressen, die aus 16 hexadezimalen Ziffern bestehen. Wenn Sie die neue Zeile hinzufügen, erhalten Sie17
.quelle
Wenn es Funktionen gibt, die für eine bestimmte Version spezifisch sind, können Sie nm ausprobieren und dann nach der Funktion suchen.
quelle