Ответ 1
objdump
выглядит наилучшим образом:
objdump -f libfoo.a | grep ^architecture
Мы распространяем в Linux статическую библиотеку как в 64-битной, так и в 32-разрядной версиях. При устранении неполадок с клиентом я бы хотел, чтобы моя диагностическая оболочка script быстро устранила проблему, проверив файл .a архива, чтобы определить, 32 или 64 бит. Методы, которые происходят со мной, менее элегантны:
извлечь член .o и запросить команду "файл" (например, 32-битный ELF и т.д.)
начать включать фиктивный элемент, закодированный для указания, например. 32bit.o/64bit.o и использовать "ar -t" для проверки
Я пробовал "строки xyz.a | grep 32", но это не очень хорошо работает над версиями. Не проблема с сердцем, но если вы знаете об элегантном решении, я хотел бы знать.
objdump
выглядит наилучшим образом:
objdump -f libfoo.a | grep ^architecture
Самый простой способ - использовать команду file.
$file <.so file or .a file>
Просто используйте команду file; т.е. file library.so
Если есть функции, специфичные для конкретной версии, вы можете попробовать nm, затем grep для функции.
oops, что отсутствующий sed означает, что он отображает многие элементы.
Как раз в ответ:
count=$(nm foo.a | grep '^0' | head -1 | sed 's/ .*//' | wc -c)
((count == 17)) && echo 64bit
((count == 9)) && echo 32bit
((count == 0)) && echo '??bit'
Как это должно работать:
В 32-битной среде вы получаете адреса, состоящие из 8 шестнадцатеричных цифр, добавляя новую строку: 9
. В 64-битной среде вы получаете адреса, состоящие из 16 шестнадцатеричных цифр, добавляя новую строку. 17
.