ar(유닉스)
ar (Unix)원저작자 | 켄 톰슨 데니스 리치 (AT&T 벨 연구소) |
---|---|
개발자 | 다양한 오픈 소스 및 상용 개발자 |
초기 릴리즈 | 1971년 11월 3일, | 전(
기입처 | C |
운영 체제 | Unix, Unix like, V, Plan 9, Inferno |
플랫폼 | 크로스 플랫폼 |
유형 | 명령어 |
면허증. | 계획 9: MIT 라이선스 |
파일 이름 확장자 | |
---|---|
인터넷 미디어 유형 | 응용 프로그램/x-module[1] |
매직 넘버 | !<아치> |
포맷의 종류 | 아카이브 포맷 |
컨테이너: | 보통 오브젝트 파일(.o, .obj) |
표준. | 표준화되지 않은 여러 변종이 존재합니다. |
오픈 포맷? | 네, 그렇습니다[2]. |
archiver(단순히 ar라고도 함)는 파일 그룹을 단일 아카이브 파일로 유지하는 Unix 유틸리티입니다.오늘은,ar
는 일반적으로 링크 에디터 또는 링커가 사용하는 정적 라이브러리 파일 작성 및 업데이트 및 Debian 패밀리의 .deb 패키지 생성에만 사용됩니다.어떤 목적으로든 아카이브 작성에 사용할 수 있지만 대부분 대체되었습니다.tar
정적 [3]라이브러리 이외의 목적으로 사용됩니다.의 실장ar
는 GNU Binutils [2]중 하나로 포함되어 있습니다.
Linux Standard Base(LSB)에서는ar
는 폐지되어 이 표준의 향후 릴리스에서는 삭제될 예정입니다."LSB는 소프트웨어 개발 유틸리티를 포함하지 않으며 .o 및 .a 파일 형식을 지정하지 않습니다."[4]
파일 형식 상세
ar 형식은 표준화된 적이 없습니다. 현대의 아카이브는 BSD와 시스템 V의 두 가지 주요 변형(처음에는 COFF로 알려졌으며 GNU, ELF 및 Windows에서 사용됨)을 가진 공통 형식을 기반으로 합니다.
지금까지 V6, V7, AIX(소형 및 대형), Coordiency 등 다른[5] 변종도 존재했는데, 이 모든 것은 일반적인 [6]형식과 크게 다릅니다.
Debian ".deb" 아카이브는 공통 형식을 사용합니다.
ar 파일은 글로벌헤더로 시작하여 ar 파일 내에 저장되어 있는 각 파일의 헤더와 데이터 섹션으로 이어집니다.
각 데이터 섹션은 2바이트 정렬되어 있습니다.홀수 오프셋으로 끝나는 경우 새 라인('\n', 0x0A)이 필러로 사용됩니다.
파일 서명
파일 서명은 매직 ASCII 문자열을 포함하는 단일 필드입니다. "!<arch>"
LF 컨트롤 문자(0x0A)가 이어집니다.
파일 헤더
ar 아카이브에 격납된 각 파일은 파일에 관한 정보를 격납하는 파일 헤더를 포함한다.일반적인 형식은 다음과 같습니다.숫자 값은 ASCII로 인코딩되며 모든 값은 ASCII 공백(0x20)으로 오른쪽 패딩됩니다.
오프셋 | 길이 | 이름. | 포맷 |
---|---|---|---|
0 | 16 | 파일 식별자 | ASCII |
16 | 12 | 파일 수정 타임스탬프(초) | 십진수 |
28 | 6 | 소유자 ID | 십진수 |
34 | 6 | 그룹 아이디 | 십진수 |
40 | 8 | 파일 모드(유형 및 권한) | 옥탈 |
48 | 10 | 파일 크기(바이트) | 십진수 |
58 | 2 | 엔딩 문자 | 0x60 0x0A |
헤더에는 인쇄 가능한 ASCII 문자와 줄 바꿈만 포함되므로 텍스트 파일만 포함하는 아카이브는 텍스트 파일 자체인 것으로 보입니다.
멤버는 짝수 바이트 경계에 맞춰 정렬됩니다."각 아카이브 파일 구성원은 짝수 바이트 경계에서 시작합니다. 필요에 따라 파일 사이에 새 줄을 삽입합니다.그러나 주어진 크기는 [7]패딩을 제외한 파일의 실제 크기를 반영합니다."
파일명의 길이와 포맷의 제한으로 인해 GNU와 BSD의 변형 모두 긴 파일명을 저장하는 다른 방법을 고안했습니다.일반적인 포맷에서는 2038년의 문제는 발생하지 않지만 ar 유틸리티의 많은 구현에서는 2147483647을 초과하는 타임스탬프를 올바르게 처리하기 위해 향후 수정이 필요할 수 있습니다.이러한 확장에 대한 설명은 libbfd에서 [8]확인할 수 있습니다.
포맷에 따라 많은 ar 구현체에는 전체 아카이브를 스캔하여 기호를 찾을 필요 없이 빠르게 연결할 수 있는 글로벌 심볼 테이블(armap, 디렉토리 또는 인덱스)이 포함되어 있습니다.POSIX는 이 기능을 인식하고 있으며 ar 구현을 통해 이 기능을-s
옵션을 선택합니다.대부분의 구현에서는 첫 번째 파일 [9]엔트리에 배치합니다.
BSD 바리안트
BSD ar 에는, 파일명에 ASCII 스페이스가 오른쪽 패드로 격납되어 있습니다.이로 인해 파일 이름 내부의 공간에 문제가 발생합니다.4 .BSD ar 에서는, 파일명 필드에 문자열 「#1/」의 뒤에 파일명 길이를 붙여, 데이터 [6]섹션의 앞에 실제의 파일명을 보존하는 것으로 확장 파일명을 보존합니다.
BSD ar 유틸리티는 일반적으로 글로벌심볼 룩업테이블 구축을 처리하지 않고 ranlib라는 이름의 [10]다른 유틸리티에 이 작업을 위임합니다.이 유틸리티는 다음과 같은 아키텍처 고유의 파일을 삽입합니다.__.SYMDEF
첫 번째 아카이브 [11]구성원으로서일부 하위 항목에서는 [12]정렬된 버전을 나타내기 위해 이름 뒤에 공백과 "SORTED"를 넣기도 합니다.라고 하는 64비트 배리언트__.SYMDEF_64
다윈에 존재합니다.
POSIX는 다음 요건을 추가했기 때문에-s
단, 새로운 BSD ar 구현은 이 기능을 사용하도록 다시 작성되었습니다.특히 FreeBSD는 SYMDEF 테이블 형식을 삭제하고 System V 스타일 [13]테이블을 채택했습니다.
System V(또는 GNU) 배리언트
System V ar 에서는 파일 이름 끝에 '/' 문자(0x2F)를 사용합니다.이것에 의해, 확장 파일명을 사용하지 않고 스페이스를 사용할 수 있습니다.그런 다음 이름이 "//"인 파일의 데이터 섹션에 여러 확장 파일 이름을 저장합니다. 이 레코드는 이후 헤더에 의해 참조됩니다.헤더는 확장 파일 이름 데이터 섹션에 파일 이름 시작까지의 10진수 오프셋에 이어 "/"를 저장함으로써 확장 파일 이름을 참조합니다.이 "//" 파일의 형식 자체는 긴 파일 이름 목록이며, 각각은 하나 이상의 LF 문자로 구분됩니다.10진수 오프셋은 "//" 파일 내의 행 또는 문자열 번호가 아닌 문자 수입니다.이것은 보통 기호 테이블 다음에 있는 파일의 두 번째 항목이며, 항상 첫 번째 항목입니다.
System V ar는 특별한 파일 이름 "/"를 사용하여 다음 데이터 엔트리에 액세스 속도를 높이기 위해 ar 라이브러리에서 사용되는 기호 룩업 테이블이 포함되어 있음을 나타냅니다.이 기호 표는 연속 데이터로 함께 기록된 세 부분으로 구성됩니다.
- 테이블 내의 엔트리 수를 나타내는32비트 빅엔디안 정수
- 32비트 빅 엔디언 정수 세트.각 기호당 하나씩, 이 기호를 포함하는 파일의 헤더 아카이브 내 위치를 기록합니다.
- 제로 종단 문자열 세트.각각은 기호 이름으로 파트 2의 위치 목록과 같은 순서로 발생합니다.
일부 System V 시스템은 기호 조회 테이블에 대해 위에서 설명한 형식을 사용하지 않습니다.HP-UX 11.0 등의 운영 체제의 경우 이 정보는 SOM 파일 형식에 기반한 데이터 구조에 저장됩니다.
특수 파일 "/"는 특정 시퀀스로 종료되지 않습니다. 마지막 기호 이름을 읽으면 끝이라고 가정합니다.
4 GiB 파일사이즈 제한을 극복하려면 Solaris 11.2 및 GNU와 같은 일부 운영체제를 바리안트룩업 테이블을 사용합니다.기호 검색 테이블에는 32비트 정수 대신 64비트 정수가 사용됩니다."/" 대신 문자열 "/SYM64/"이 이 테이블의[14] 식별자로 사용됩니다.
Windows 버전
Windows(PE/COFF) 배리언트는 SysV/GNU 배리언트를 기반으로 합니다.첫 번째 항목 "/"는 SysV/GNU 기호 테이블과 레이아웃이 동일합니다.두 번째 항목은 확장 기호 상호 참조 테이블을 저장하는 Microsoft ECOFF 확장자 "/"입니다.이건 정렬되어 있고 작은 끝 [5][15]정수를 사용합니다.세 번째 항목은 SysV/GNU와 [16]같이 옵션인 "//" 긴 이름 데이터입니다.
신아카이브
의 버전ar
GNU binutils 및 Elfutils 에는 매직 넘버!<thin>의 추가 "thin archive" 형식이 있습니다.씬 아카이브에는 기호 테이블과 파일에 대한 참조만 포함됩니다.파일 형식은 기본적으로 데이터 섹션 없이 모든 파일이 저장되는 시스템 V 형식 아카이브입니다.모든 파일명은 "긴" 파일명으로 저장되며 심볼릭 [17]링크인 것처럼 해결됩니다.
사용 예
class1.o, class2.o, class3.o 파일에서 아카이브를 작성하려면 다음 명령을 사용합니다.
arcs libclass.a class1.o class2.o class3.o
Unix 링커(통상은 C 컴파일러를 통해 기동)cc
읽을 수 있습니다.ar
파일 및 객체 파일을 추출합니다.libclass.a
다음 파일을 포함하는 아카이브입니다.class1.o
,class2.o
그리고.class3.o
,그리고나서
cc main.clibclass.a
또는 (libclass.a가 /usr/local/lib와 같은 표준 라이브러리 경로에 배치된 경우)
cc main.c -lclass
또는 (링크 중)
ld... main.o -lclass...
다음과 같습니다.
cc main.c class1.o class2.o class3.o
「 」를 참조해 주세요.
레퍼런스
- ^ a b "application/x-archive". Retrieved 2019-03-11.
- ^ a b "ar(1) - Linux man page". Retrieved 3 October 2013.
- ^ "Static Libraries". TLDP. Retrieved 3 October 2013.
- ^ Linux Standard Base Core Specification 버전 4.1, 15장.명령어 및 유틸리티> ar
- ^ a b Levine, John R. (2000) [October 1999]. "Chapter 6: Libraries". Linkers and Loaders. The Morgan Kaufmann Series in Software Engineering and Programming (1 ed.). San Francisco, USA: Morgan Kaufmann. ISBN 1-55860-496-0. OCLC 42413382. Archived from the original on 2012-12-05. Retrieved 2020-01-12. 코드: [1][2] 에라타: [3]
- ^ a b NET/2 ar 파일 형식의 수동 페이지
- ^ "ar.h". www.unix.com. The UNIX and Linux Forums.
- ^ "bminor/binutils-gdb: archive.c". GitHub. 16 July 2022.
- ^ 단일 UNIX 사양, The Open Group 버전 4 – 셸 및 유틸리티 레퍼런스,
- ^ NET/2 runlib 유틸리티 수동 페이지
- ^ NET/2 runlib 파일 형식 수동 페이지
- ^ "ranlib.h". opensource.apple.com.
- ^ FreeBSD 파일 포맷 매뉴얼 –
- ^ "ar.h(3HEAD)". docs.oracle.com. Oracle Corporation. 11 November 2014. Retrieved 14 November 2018.
- ^ Pietrek, Matt (April 1998), "Under The Hood", Microsoft Systems Journal, archived from the original on 2007-06-24, retrieved 2014-08-23
- ^ "llvm-mirror/llvm: archive.cpp (format detection)". GitHub. Retrieved 10 February 2020.
- ^ "ar". GNU Binary Utilities.
외부 링크

- The Single UNIX Specification, The Open Group 버전4 : 라이브러리 아카이브 작성 및 유지보수– Shell and Utilities Reference,
- Plan 9 프로그래머 매뉴얼, 1권 –
- Inferno 일반 명령 설명서 –
- Linux 사용자 명령어 매뉴얼 –
- FreeBSD 일반 명령어 매뉴얼 –
- 버전 7 Unix 프로그래머 매뉴얼 –
- FreeBSD 파일 포맷 매뉴얼 - Unix 포맷 계정 –
- 32비트 PA-RISC 런타임 아키텍처 문서, HP-UX 11.0 버전 1.0, Hewlett-Packard, 1997.
4장: 재배치 가능한 라이브러리를 참조하십시오.[4] (devresource.hp.com)에서 입수 가능