Мы распространяем в Linux статические библиотеки как в 64-битной, так и в 32-битной версиях. При устранении неполадок клиента я хотел бы, чтобы мой сценарий диагностической оболочки быстро устранял проблему, проверяя файл архива .a, чтобы определить, является ли он 32-разрядным или 64-разрядным. Методы, которые мне приходят в голову, менее чем элегантны:
извлеките член .o и задайте команду "file" (например, 32-битный ELF и т. д.)
start, включая фиктивный член, закодированный для указания, например, 32bit.o / 64bit.o, и используйте "ar -t" для проверки
Я пробовал "strings xyz.a | grep 32", но это не работает с версиями. Это не страшная проблема, но если вы знаете элегантное решение, я хотел бы знать.
linux
32bit-64bit
archive
cvsdave
источник
источник
Ответы:
objdump
кажется лучшим способом:источник
file
легче читать, как указано ниже stackoverflow.com/a/8909086/233906architecture: i386:x86-64, flags 0x00000039:
.. Значит ли это, что и то, и другое ..? это маловероятно. помогите пожалуйста: Di386
(простой старый IA32),i386:x86-64
(AMD64) иi386:x64-32
(архитектура X32 с 32-разрядным адресным пространством в длинном режиме).objdump -f lib.a | grep ^architecture | cut -d' ' -f-2 | sort -u
:)Самый простой способ - использовать команду file.
источник
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
Просто используйте команду file; т.е.
file library.so
источник
Просто в ответ:
Как это должно работать:
В 32-битной среде вы получаете адреса, состоящие из 8 шестнадцатеричных цифр, добавление новой строки дает вам.
9
В 64-битной среде вы получаете адреса, состоящие из 16 шестнадцатеричных цифр, добавление новой строки дает вам17
.источник
Если есть функции, специфичные для конкретной версии, вы можете попробовать nm, а затем grep для функции.
источник