ar - 아카이브에서 생성, 수정 및 추출
ar [-X32_64] [-]p[mod] [--plugin name] [--target bfdname] [--output dirname] [--record-libdeps libdeps] [--thin] [relpos] [count] archive [member...]
GNU ar 프로그램은 아카이브를 생성, 수정 및 추출합니다. 아카이브는 원본 개별 파일(아카이브의 구성원이라고 함)을 검색할 수 있는 구조로 다른 파일 모음을 포함하는 단일 파일입니다.
원본 파일의 내용, 모드(권한), 타임스탬프, 소유자 및 그룹은 아카이브에 보존되며 추출 시 복원할 수 있습니다.
GNU ar는 구성원이 임의의 길이의 이름을 가진 아카이브를 유지할 수 있습니다. 그러나 시스템에서 ar이 구성되는 방식에 따라 다른 도구로 유지되는 아카이브 형식과의 호환성을 위해 구성원 이름 길이에 대한 제한이 적용될 수 있습니다. 존재하는 경우 제한은 종종 15자(a.out과 관련된 일반적인 형식) 또는 16자(coff와 관련된 일반적인 형식)입니다.
ar은 이러한 종류의 아카이브가 일반적으로 필요한 서브루틴을 포함하는 라이브러리로 가장 자주 사용되기 때문에 바이너리 유틸리티로 간주됩니다. 라이브러리는 종종 다른 라이브러리에 의존하므로 ar는 --record-libdeps 옵션이 지정된 경우 라이브러리의 종속성을 기록할 수도 있습니다.
ar는 수정자 s를 지정할 때 아카이브의 재배치 가능 개체 모듈에 정의된 심볼에 대한 인덱스를 생성합니다. 일단 생성되면 이 색인은 ar가 내용을 변경할 때마다 아카이브에서 업데이트됩니다(q 업데이트 작업을 위해 저장). 이러한 인덱스가 있는 아카이브는 라이브러리에 대한 연결 속도를 높이고 라이브러리의 루틴이 아카이브에서의 위치에 관계없이 서로를 호출할 수 있도록 합니다.
nm -s 또는 nm --print-armap을 사용하여 이 인덱스 테이블을 나열할 수 있습니다. 아카이브에 테이블이 없으면 ranlib이라는 다른 ar 형식을 사용하여 테이블만 추가할 수 있습니다.
GNU ar는 기호 인덱스와 아카이브 구성원 파일의 원본에 대한 참조를 포함하는 씬 아카이브를 선택적으로 생성할 수 있습니다. 이는 재배치 가능한 객체가 계속 사용 가능할 것으로 예상되고 각 객체의 내용을 복사하는 것은 시간과 공간만 낭비하는 로컬 빌드 트리 내에서 사용할 라이브러리를 빌드하는 데 유용합니다.
아카이브는 가벼울 수도 있고 정상일 수도 있습니다. 그것은 동시에 둘 다일 수 없습니다. 아카이브가 생성되면 먼저 삭제한 다음 그 자리에 새 아카이브를 생성하지 않고는 형식을 변경할 수 없습니다.
또한 씬 아카이브는 평면화되므로 하나의 씬 아카이브를 다른 씬 아카이브에 추가해도 일반 아카이브에서처럼 중첩되지 않습니다. 대신 첫 번째 아카이브의 요소가 두 번째 아카이브에 개별적으로 추가됩니다.
아카이브 요소에 대한 경로는 아카이브 자체에 상대적으로 저장됩니다.
GNU ar는 두 가지 다른 기능과 호환되도록 설계되었습니다. Unix 시스템의 다양한 종류의 ar와 같은 명령줄 옵션을 사용하여 활동을 제어할 수 있습니다. 또는 단일 명령줄 옵션 -M을 지정하면 MRI 사서 프로그램과 같은 표준 입력을 통해 제공되는 스크립트를 사용하여 제어할 수 있습니다.
GNU ar를 사용하면 첫 번째 명령줄 인수 내에서 작업 코드 p와 수정자 플래그 mod를 임의의 순서로 혼합할 수 있습니다.
원하는 경우 대시로 첫 번째 명령줄 인수를 시작할 수 있습니다.
p 키 문자는 실행할 작업을 지정합니다. 다음 중 하나일 수 있지만 그 중 하나만 지정해야 합니다.
아카이브에서 모듈을 삭제합니다. 삭제할 모듈의 이름을 구성원으로 지정...; 삭제할 파일을 지정하지 않으면 아카이브는 그대로 유지됩니다. v 수정자를 지정하면 ar는 삭제된 각 모듈을 나열합니다.
아카이브에서 구성원을 이동하려면 이 작업을 사용하십시오. 아카이브에서 멤버의 순서는 기호가 둘 이상의 멤버에 정의된 경우 라이브러리를 사용하여 프로그램이 연결되는 방식에 차이를 만들 수 있습니다. m과 함께 수정자가 사용되지 않으면 member 인수에서 지정한 모든 구성원이 아카이브의 끝으로 이동됩니다. 대신 a, b 또는 i 수정자를 사용하여 지정된 위치로 이동할 수 있습니다.
아카이브의 지정된 구성원을 표준 출력 파일로 인쇄합니다. v 수정자가 지정된 경우 해당 콘텐츠를 표준 출력으로 복사하기 전에 구성원 이름을 표시합니다. member 인수를 지정하지 않으면 아카이브의 모든 파일이 인쇄됩니다.
빠른 추가; 역사적으로 파일 member...를 archive의 끝에 추가하고 교체를 확인하지 않습니다. 수식어 a, b 및 i는 이 작업에 영향을 미치지 않습니다. 새 구성원은 항상 아카이브의 끝에 배치됩니다. 수정자 v는 추가되는 각 파일을 ar 나열합니다. 이 작업의 핵심은 속도이기 때문에 ar 구현에는 아카이브의 심볼 테이블이 있는 경우 이를 업데이트하지 않는 옵션이 있습니다. 그러나 너무 많은 다른 시스템에서 기호 테이블이 항상 최신 상태라고 가정하므로 GNU ar는 빠른 추가로도 테이블을 다시 빌드합니다. 참고 - GNU ar는 qs 명령을 r의 동의어로 취급합니다. 즉, 아카이브에 이미 존재하는 파일을 교체하고 끝에 새 파일을 추가합니다.
구성원... 파일을 아카이브에 삽입합니다(교체 포함). 이 작업은 기존 구성원의 이름이 추가되는 구성원의 이름과 일치하면 기존 구성원이 삭제된다는 점에서 q와 다릅니다. 구성원...에 이름이 지정된 파일 중 하나가 존재하지 않으면 ar는 오류 메시지를 표시하고 해당 이름과 일치하는 아카이브의 기존 구성원을 그대로 둡니다. 기본적으로 새 구성원은 파일 끝에 추가됩니다. 그러나 수정자 a, b 또는 i 중 하나를 사용하여 일부 기존 구성원과 관련된 배치를 요청할 수 있습니다. 이 작업과 함께 사용되는 수정자 v는 삽입된 각 파일에 대한 출력 라인을 이끌어내고 다음을 나타내는 문자 a 또는 r 중 하나를 나타냅니다. 파일이 추가되었거나(이전 구성원이 삭제되지 않음) 대체되었습니다.
아카이브에 색인을 추가하거나 이미 있는 경우 업데이트합니다. 이 명령은 명령 또는 수정자로 사용할 수 있으므로 하나의 명령 문자만 있을 수 있다는 규칙의 예외입니다. 두 경우 모두 동일한 작업을 수행합니다.
아카이브에 있는 아카이브의 내용 또는 구성원...에 나열된 파일의 내용을 나열하는 테이블을 표시합니다. 일반적으로 멤버 이름만 표시되지만 수정자 O가 지정된 경우 멤버의 해당 오프셋도 표시됩니다. 마지막으로 모드(권한), 타임스탬프, 소유자, 그룹 및 크기를 보려면 v 수정자가 포함되어야 합니다. 구성원을 지정하지 않으면 아카이브의 모든 파일이 나열됩니다. 아카이브(예: b.a)에 동일한 이름(예: fie)을 가진 파일이 두 개 이상 있는 경우 ar t b.a fie는 다음을 나열합니다. 첫 번째 인스턴스만; 모두 보려면 전체 목록을 요청해야 합니다(예: art b.a).
아카이브에서 구성원(구성원)을 추출합니다. 이 작업에 v 수정자를 사용하여 각 이름을 추출할 때 ar 나열하도록 요청할 수 있습니다. 구성원을 지정하지 않으면 아카이브의 모든 파일이 추출됩니다. 씬 아카이브에서 파일을 추출할 수 없으며 P로 만든 아카이브에서 추출하는 데 제한이 있습니다. 경로는 절대 경로가 아니어야 하며 ..를 포함할 수 없으며 모든 경로에 하위 디렉터리가 있어야 합니다. 이러한 제한을 피하려면 --output 옵션을 사용하여 출력 디렉토리를 지정하십시오.
여러 수식어(mod)가 p 키 문자 바로 다음에 작업 동작의 변형을 지정할 수 있습니다.
아카이브의 기존 구성원 뒤에 새 파일을 추가합니다. 수정자 a를 사용하는 경우 기존 아카이브 구성원의 이름이 archive 사양 앞에 relpos 인수로 나타나야 합니다.
아카이브의 기존 구성원 앞에 새 파일을 추가합니다. 수정자 b를 사용하는 경우 기존 아카이브 구성원의 이름이 archive 사양 앞에 relpos 인수로 나타나야 합니다. (i와 동일).
아카이브를 만듭니다. 지정된 아카이브는 업데이트를 요청할 때 존재하지 않는 경우 항상 생성됩니다. 그러나 이 수정자를 사용하여 생성할 것으로 예상한다고 미리 지정하지 않으면 경고가 발생합니다.
결정적 모드에서 작동합니다. 파일 및 아카이브 인덱스를 추가할 때 UID, GID, 타임스탬프에 0을 사용하고 모든 파일에 대해 일관된 파일 모드를 사용합니다. 이 옵션을 사용할 때 ar이 동일한 옵션 및 동일한 입력 파일과 함께 사용되는 경우 다중 실행은 입력 파일의 소유자, 그룹, 파일 모드 또는 수정 시간에 관계없이 동일한 출력 파일을 생성합니다. binutils가 --enable-deterministic-archives로 구성된 경우 이 모드는 기본적으로 켜져 있습니다. 아래의 U 수정자로 비활성화할 수 있습니다.
아카이브에서 이름을 자릅니다. GNU ar는 일반적으로 모든 길이의 파일 이름을 허용합니다. 이로 인해 일부 시스템의 기본 ar 프로그램과 호환되지 않는 아카이브가 생성됩니다. 이것이 우려되는 경우 f 수식어를 사용하여 파일을 아카이브에 넣을 때 파일 이름을 자를 수 있습니다.
아카이브의 기존 구성원 앞에 새 파일을 삽입합니다. 수정자 i를 사용하는 경우 기존 아카이브 구성원의 이름이 archive 사양 앞에 relpos 인수로 나타나야 합니다. (b와 동일).
이 라이브러리의 종속성을 지정합니다. 종속성은 이 옵션 문자 바로 다음에 와야 하고 링커 명령줄과 동일한 구문을 사용해야 하며 단일 인수 내에 지정되어야 합니다. 즉, 여러 항목이 필요한 경우 단일 명령줄 인수를 형성하기 위해 인용해야 합니다. 예: L -L/usr/local/lib -lmydep1 -lmydep2
count 매개변수를 사용합니다. 이것은 동일한 이름을 가진 아카이브에 여러 항목이 있는 경우에 사용됩니다. 아카이브에서 주어진 이름의 인스턴스 개수를 추출하거나 삭제합니다.
구성원을 추출할 때 구성원의 원본 날짜를 유지하십시오. 이 수정자를 지정하지 않으면 아카이브에서 추출된 파일에 추출 시간이 찍힙니다.
아카이브 내부의 멤버 오프셋을 표시합니다. t 옵션과 함께 사용하세요.
아카이브에서 이름을 일치시키거나 저장할 때 전체 경로 이름을 사용하십시오. 전체 경로 이름으로 생성된 아카이브는 POSIX와 호환되지 않으므로 최신 GNU 도구 이외의 도구에서는 작동하지 않을 수 있습니다. P를 사용하지 않고 GNU ar로 이러한 아카이브를 수정하면 아카이브가 씬 아카이브가 아닌 한 전체 경로 이름이 제거됩니다. P가 없는 r은 대체할 요소를 선택할 때 경로를 무시하므로 P는 씬 아카이브에 파일을 추가할 때 유용할 수 있습니다. 따라서 ar rcST archive.a subdir/file1 subdir/file2 file1은 첫 번째 subdir/file1이 현재 디렉토리의 file1로 대체되는 결과를 낳습니다. P를 추가하면 이 교체를 방지할 수 있습니다.
아카이브에 다른 변경 사항이 없는 경우에도 아카이브에 개체 파일 인덱스를 쓰거나 기존 인덱스를 업데이트합니다. 이 수정자 플래그는 모든 작업과 함께 또는 단독으로 사용할 수 있습니다. 아카이브에서 ar s를 실행하는 것은 아카이브에서 ranlib을 실행하는 것과 같습니다.
아카이브 기호 테이블을 생성하지 마십시오. 이렇게 하면 여러 단계로 대규모 라이브러리를 구축하는 속도를 높일 수 있습니다. 결과 아카이브는 링커와 함께 사용할 수 없습니다. 기호 테이블을 빌드하려면 ar의 마지막 실행에서 S 수정자를 생략하거나 아카이브에서 ranlib를 실행해야 합니다. .
--thin의 더 이상 사용되지 않는 별칭입니다. T는 많은 ar 구현에서 T가 X/Open System Interface에서 지정한 것과 다른 의미를 갖기 때문에 권장되지 않습니다.
일반적으로 ar r...은 나열된 모든 파일을 아카이브에 삽입합니다. 동일한 이름의 기존 구성원보다 최신인 목록 파일 만 삽입하려면 이 수정자를 사용하십시오. u 수식어는 r(바꾸기) 작업에만 허용됩니다. 특히 qu 조합은 허용되지 않습니다. 타임스탬프를 확인하면 q 작업의 속도 이점이 손실되기 때문입니다.
결정적 모드에서 작동하지 않습니다. 위의 D 수식어와 반대입니다. 추가된 파일과 아카이브 인덱스는 실제 UID, GID, 타임스탬프 및 파일 모드 값을 가져옵니다. binutils가 --enable-deterministic-archives로 구성되지 않은 경우 기본값입니다.
이 수정자는 작업의 verbose 버전을 요청합니다. 수정자 v가 추가되면 많은 작업에서 처리된 파일 이름과 같은 추가 정보가 표시됩니다.
이 수정자는 ar의 버전 번호를 표시합니다.
ar 프로그램은 수정자도 작업도 아니지만 특정 방식으로 동작을 변경하는 몇 가지 명령줄 옵션도 지원합니다.
ar에서 지원하는 명령줄 옵션 목록을 표시한 다음 종료합니다.
ar의 버전 정보를 표시한 후 종료합니다.
ar은 AIX와의 호환성을 위해 초기 옵션 철자 -X32_64를 무시합니다. 이 옵션으로 생성된 동작은 GNU ar의 기본값입니다. ar은 다른 -X 옵션을 지원하지 않습니다. 특히 AIX ar의 기본값인 -X32를 지원하지 않습니다.
선택적 명령줄 스위치 --plugin name을 사용하면 ar가 다음에 대한 지원을 추가하는 name이라는 플러그인을 로드합니다. 링크 타임 최적화 정보가 있는 개체 파일을 포함하여 더 많은 파일 형식. 이 옵션은 도구 체인이 플러그인 지원이 활성화된 상태로 구축된 경우에만 사용할 수 있습니다. --plugin이 제공되지 않았지만 플러그인 지원이 활성화된 경우 $ {libdir}/bfd-plugins 에 있는 파일을 ar 반복합니다. 을 알파벳순으로 사용하고 해당 개체를 주장하는 첫 번째 플러그인이 사용됩니다. 이 플러그인 검색 디렉토리는 ld의 -plugin 옵션에서 사용하는 디렉토리가 아닙니다. ar이 링커 플러그인을 사용하도록 하려면 $ {libdir}/bfd-plugins 디렉토리에 복사해야 합니다. GCC 기반 컴파일의 경우 링커 플러그인은 liblto_plugin.so.0.0.0입니다. Clang 기반 컴파일의 경우 LLVMgold.so라고 합니다. GCC 플러그인은 항상 이전 버전과 역호환되므로 최신 버전을 복사하는 것으로 충분합니다.
선택적 명령줄 스위치 --target bfdname은 아카이브 구성원이 시스템의 기본 형식과 다른 개체 코드 형식임을 지정합니다. 보다
--output 옵션은 아카이브 구성원을 추출해야 하는 디렉토리의 경로를 지정하는 데 사용할 수 있습니다. 이 옵션을 지정하지 않으면 현재 디렉터리가 사용됩니다. 참고 - 이 옵션이 있다는 것은 x 추출 작업을 의미하지만 해당 옵션은 여전히 명령줄에 포함되어야 합니다.
--record-libdeps 옵션은 l 한정자와 동일하며 긴 형식으로 처리됩니다.
지정된 아카이브를 씬 아카이브로 만듭니다. 이미 존재하고 일반 아카이브인 경우 기존 구성원은 아카이브와 동일한 디렉토리에 있어야 합니다.
파일에서 명령줄 옵션을 읽습니다. 원래 @file 옵션 대신 읽은 옵션이 삽입됩니다. 파일이 존재하지 않거나 읽을 수 없는 경우 옵션은 문자 그대로 처리되며 제거되지 않습니다. 파일의 옵션은 공백으로 구분됩니다. 전체 옵션을 작은따옴표나 큰따옴표로 묶어서 옵션에 공백 문자를 포함할 수 있습니다. 포함할 문자 앞에 백슬래시를 추가하여 모든 문자(백슬래시 포함)를 포함할 수 있습니다. 파일 자체에 추가 @파일 옵션이 포함될 수 있습니다. 이러한 옵션은 재귀적으로 처리됩니다.
nm (1), ranlib (1), and the Info entries for binutils.
Copyright (c) 1991-2023 Free Software Foundation, Inc.
GNU 자유 문서 라이선스 버전 1.3 또는 자유 소프트웨어 재단에서 발행한 이후 버전의 조건에 따라 이 문서를 복사, 배포 및/또는 수정할 수 있는 권한이 부여됩니다. 고정 섹션 없음, 앞 표지 텍스트 없음 및 뒤 표지 텍스트 없음. 라이센스 사본은 GNU 무료 문서 라이센스 섹션에 포함되어 있습니다.