Linux에서 64 비트 및 32 비트 버전의 정적 라이브러리를 배포합니다. 고객의 문제를 해결할 때 진단 셸 스크립트가 .a 아카이브 파일을 확인하여 32 비트인지 64 비트인지 확인하여 문제를 신속하게 제거하고 싶습니다. 나에게 발생하는 방법은 우아하지 않습니다.
-
.o 멤버를 추출하고 “file”명령을 요청합니다 (예 : ELF 32 비트 등).
-
예를 들어 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을 시도 할 수 있습니다.