In LINUX determine if a .a library/archive 32-bit or 64-bit?

Solution 1:

objdump seems like the best way:

objdump -f libfoo.a | grep ^architecture

Solution 2:

The simplest way is to use the file command.

$ file <.so file or .a file>

Solution 3:

Just use the file command; i.e. file library.so

Solution 4:

oops, that missing sed means that it was displaying to many items.

Just in an answer:

count=$(nm foo.a | grep '^0' | head -1 | sed 's/ .*//' | wc -c)
((count == 17)) && echo 64bit
((count == 9)) && echo 32bit
((count == 0)) && echo '??bit'

How it's supposed to work:

  • nm - get the symbols from the library
  • grep - get lines starting with a hex string (address of symbol in file)
  • head - get the first line
  • sed - remove everything past the whitespace, including the whitespace
  • wc - count the number of characters.

In a 32 bit environment, you get addresses made up of 8 hex digits, adding the new line gives you 9, In a 64bit environment, you get addresses made up of 16 hex digits, adding the new line gives you 17.

Solution 5:

If there are functions that are specific to a particular version you could try nm then grep for the function.