Mac OS X에서 정적 라이브러리(.a)의 대상 아키텍처를 어떻게 결정합니까?
주어진 iPhone 정적 라이브러리가 ARM용으로 구축되었는지 Intel용으로 구축되었는지 확인하고 싶습니다.
그것은 무엇보다도 호기심입니다.이를 위한 Mac OS X 또는 BSD 전용 도구가 있습니까?이 게시물은 Linux의 예를 제공합니다.
또 다른 옵션은lipo그것의 출력은 짧고 더 읽기 쉽습니다.otool의
예:
% lipo -info /usr/lib/libiodbc.a
Architectures in the fat file: /usr/lib/libiodbc.a are: x86_64 i386 ppc
% lipo -info libnonfatarchive.a
input file libnonfatarchive.a is not a fat file
Non-fat file: libnonfatarchive.a is architecture: i386
%
file아마 말해줄 거예요. otool당연히 할 수 있어야 합니다.하지만 노력은 해볼께.file첫째, 예를 들어
logan:/Users/logan% file d2
d2: Mach-O executable ppc
아카이브를 사용한 예제:
logan:/Users/logan% file /usr/lib/libMallocDebug.a
/usr/lib/libMallocDebug.a: Mach-O universal binary with 2 architectures
/usr/lib/libMallocDebug.a (for architecture i386): current ar archive random library
/usr/lib/libMallocDebug.a (for architecture ppc): current ar archive
아까 말씀드렸듯이.file항상 작동하는 것은 아닙니다. otool -hv -arch all이 기능은 라이브러리의 모든 개체 파일에 대한 아키텍처 정보를 제공합니다.
예:
otool -sw/lib/lifftw3.a보관: /sw/lib/libfftw3.a/sw/lib/libfftw3.a(align.o): 마하 헤더Magic cputype CPU 하위 유형 캡스 파일 형식 ncmds 크기 cmds 플래그MH_MAGIC_64 X86_64 모든 0x00 객체3336 하위섹션_VIA_SYMBOLS/sw/lib/libfftw3.a(alloc.o): 마하 헤더Magic cputype CPU 하위 유형 캡스 파일 형식 ncmds 크기 cmds 플래그MH_MAGIC_64 X86_64 모든 0x00 객체 3416 하위 섹션_VIA_SYMBOLS...
라이브러리(또는 라이브러리에 있는 개체 파일)가 Mac Catalyst용인지 여부를 확인하는 방법에 대한 답변을 찾고 있는 사용자는 다음을 사용합니다.otool -l로드 명령을 덤프합니다.개체에 대한 LC_BUILD_VERSION 섹션을 찾습니다.Mac Catalyst는 다음과 같이 식별됩니다.platform 6보다는platform 1.
이 bash 스크립트는 아키텍처 목록을 프로그래밍 방식으로 변수로 가져오는 데 도움이 됩니다.
list_archs.sh:
#! /bin/bash
lipo -info $1 | sed -En -e 's/^(Non-|Architectures in the )fat file: .+( is architecture| are): (.*)$/\3/p'
사용 예:
./list_archs.sh /usr/lib/libc.dylib
x86_64 i386
대안으로, 저는 발견했습니다.objdump잘 작동할 수 있습니다.예를 들어, 내 환경에서는 vxWorks를 사용하여 라이브러리 아카이브를 구축하고 이러한 아카이브를 다른 프로젝트에 연결해야 합니다.아카이브가 올바른 아키텍처인지 테스트하기 위해 다음과 같은 작업을 수행할 수 있습니다(배시 구문).
if [ "$(objdumpsparc -a ${ARCHIVE_FILE} 2>&1 | ggrep -cvP 'elf32-sparc-vxworks')" -ne "0" ]; then
echo "Cannot build with ${ARCHIVE_FILE}, it contains one or more non-sparc components"
fi;
이 예는 정확하지 않습니다. elf32-sparc-vxworks라고 표시되지 않는 일부 라인이 표시되기 때문입니다. 하지만 이를 적용하기에는 충분히 쉽습니다.
이것의 좋은 이점 중 하나는objdump대부분의 *nix 운영 체제에 설치되어 있는 유사한 이름의 변형 버전인 반면 다른 응답에서 제안된 도구는 설치되어 있지 않습니다.
edit 방금 OP가 OSX에서 질문하고 있다는 생각이 들었습니다.죄송합니다.
언급URL : https://stackoverflow.com/questions/1085137/how-do-i-determine-the-target-architecture-of-static-library-a-on-mac-os-x
'programing' 카테고리의 다른 글
| SDK 위치를 찾을 수 없습니다.local.properties 파일의 sdk.dir 또는 Android_HOME 환경 변수를 사용하여 위치를 정의합니다. (0) | 2023.06.01 |
|---|---|
| iOS UITableView 머리글 보기 추가(섹션 머리글이 아님) (0) | 2023.06.01 |
| HttpContext가 있는 웹 메서드입니다.현재의.사용자. 신원.Azure에서 비활성화 후 인증된 작업 중지 (0) | 2023.06.01 |
| Android Emulator에서 내 http://localhost 웹 서버에 연결하는 방법 (0) | 2023.06.01 |
| Apple 개발자 프로그램이나 탈옥 없이 기기에서 iOS 앱 테스트 (0) | 2023.05.27 |