Kami mendistribusikan di Linux lib statis dalam versi 64-bit dan 32-bit. Saat memecahkan masalah pelanggan, saya ingin skrip shell diagnostik saya segera menghilangkan masalah dengan memeriksa file arsip .a untuk menentukan apakah itu 32 atau 64 bit. Metode yang menurut saya kurang elegan:
ekstrak anggota .o dan tanyakan perintah "file" (misalnya, ELF 32-bit dll)
mulai masukkan anggota dummy yang diberi kode untuk menunjukkan, misalnya 32bit.o / 64bit.o dan gunakan "ar -t" untuk memeriksa
Saya telah mencoba "string xyz.a | grep 32" tetapi ini tidak berfungsi dengan baik pada beberapa versi. Bukan masalah patah hati, tapi jika Anda tahu solusi yang elegan, saya ingin tahu.
linux
32bit-64bit
archive
cvsdave.dll
sumber
sumber
Jawaban:
objdump
sepertinya cara terbaik:sumber
file
lebih mudah dibaca seperti yang dinyatakan di bawah ini stackoverflow.com/a/8909086/233906architecture: i386:x86-64, flags 0x00000039:
.. apakah itu berarti keduanya ..? itu tidak mungkin. tolong bantu: Di386
(IA32 lama biasa),i386:x86-64
(AMD64) dani386:x64-32
(arsitektur X32 32-bit-address-space-in-long-mode).objdump -f lib.a | grep ^architecture | cut -d' ' -f-2 | sort -u
:)Cara termudah adalah dengan menggunakan perintah file.
sumber
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
Cukup gunakan perintah file; yaitu
file library.so
sumber
Hanya sebagai jawaban:
Bagaimana itu seharusnya bekerja:
Dalam lingkungan 32 bit, Anda mendapatkan alamat yang terdiri dari 8 digit hex, menambahkan baris baru memberi Anda
9
, Dalam lingkungan 64bit, Anda mendapatkan alamat yang terdiri dari 16 digit hex, menambahkan baris baru memberi Anda17
.sumber
Jika ada fungsi yang khusus untuk versi tertentu Anda dapat mencoba nm kemudian grep untuk fungsi tersebut.
sumber