[linux] LINUX에서 .a 라이브러리 / 아카이브 32 비트 또는 64 비트?

Linux에서 64 비트 및 32 비트 버전의 정적 라이브러리를 배포합니다. 고객의 문제를 해결할 때 진단 셸 스크립트가 .a 아카이브 파일을 확인하여 32 비트인지 64 비트인지 확인하여 문제를 신속하게 제거하고 싶습니다. 나에게 발생하는 방법은 우아하지 않습니다.

  1. .o 멤버를 추출하고 “file”명령을 요청합니다 (예 : ELF 32 비트 등).

  2. 예를 들어 32bit.o / 64bit.o를 나타내도록 코딩 된 더미 멤버를 포함하고 “ar -t”를 사용하여 확인합니다.

나는 “strings xyz.a | grep 32″를 시도했지만 이것은 버전에서 잘 작동하지 않습니다. 가슴 아픈 문제는 아니지만 우아한 해결책을 알고 있다면 알고 싶습니다.



답변

objdump 가장 좋은 방법 인 것 같습니다.

objdump -f libfoo.a | grep ^architecture


답변

가장 간단한 방법은 file 명령을 사용하는 것입니다.

$file <.so file or .a file>


답변

파일 명령을 사용하십시오. 즉file library.so


답변

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'

작동 원리 :

  • nm-라이브러리에서 기호 가져 오기
  • grep-16 진 문자열로 시작하는 행 가져 오기 (파일의 기호 주소)
  • 머리-첫 번째 줄을 얻으십시오
  • sed-공백을 포함하여 공백 이후의 모든 것을 제거합니다.
  • wc-문자 수를 계산합니다.

32 비트 환경에서 8 개의 16 진수로 구성된 주소를 얻습니다. 새 줄을 추가하면 9, 64 비트 환경에서 16 진수로 구성된 주소를 얻습니다 17. 새 줄을 추가하면 .


답변

특정 버전에 특정한 함수가있는 경우 nm를 시도한 다음 함수에 대해 grep을 시도 할 수 있습니다.


답변