♧ 사실 ar 명령으로 생성한 아카이브는 정적 라이브러리에 국한되지 않고
tar(1) 등과 마찬가지로 범용적인 비압축 아카이브로 사용할 수 있다.
그러나 일반적으로는 정적 라이브러리를 다루기 위해 사용된다.
▶ 아카이브를 생성할 경우 :: ar rcus [라이브러리 이름] [오브젝트 파일들]
r 옵션 :: 새로운 오브젝트 파일이면 추가, 기존 파일이면 치환함.
c 옵션 :: libhoge.a 파일이 존재하지 않아도 경고 메시지를 출력하지 않음.
u 옵션 :: 오브젝트 파일의 타임스탬프를 비교해 새로운 파일일 경우에만 치환함.
s 옵션 :: ranlib(1)과 마찬가지로 아카이브 인덱스를 생성.
→ 아카이브 인덱스를 생성하지 않으면 링크 속도가 느려지고, 시스템 환경에 따라서는 에러가 발생.
(※ 아카이브 인덱스는 nm -s로 조회할 수 있다.)
▶ 기존 아카이브 파일에 오브젝트 제거 :: ar ds [라이브러리 이름] [오브젝트 파일들]
d 옵션 :: 아카이브 모듈을 삭제
→ 삭제할 파일이 없다면 아카이브를 건들지 않음.
▶ 아카이브의 내용을 조회 :: ar tv [라이브러리 이름]
t 옵션 :: 아카이브에 있는 파일 리스트 출력
v 옵션 :: 자세한 내용을 보여주는 verbose 모드.
→ 이 옵션을 이용하면 파일크기나 갱신시각 등의 정보도 출력.
▶ 아카이브에서 파일을 추출하려면 :: ar xv [라이브러리 이름]
x 옵션 :: 아카이브에서 오브젝트 파일 추출
→ v옵션을 지정하면 추출한 파일에 대한 파일명 출력.
▷ ar 명령은 정적 라이브러리를 생성할 때뿐만 아니라,
정적 라이브러리의 기능을 부분적으로 변경하고자 할 경우에도 사용할 수 있다.
라이브러리가 모두 오픈 소스로 구성되어 있지 않은 이유 등으로
정적 라이브러리를 처음부터 다시 작성할 수 없는 경우에 편리하게 이용될 수 있다.
그 밖에도 아카이브 냉의 이동, 제거 등 아카이브를 다루는 옵션이 더 있지만,
대부분의 경우 위에서 설명한 옵션만으로도 문제가 없을 것이다.
'컴퓨터 서적 정리 > Binary Hacks' 카테고리의 다른 글
[Hack #19] 링크할 때 심볼 충돌 방지하기 (0) | 2011.07.04 |
---|---|
[Hack #18] C와 C++ 프로그램 링크 방법 (0) | 2011.07.04 |
[Hack #16] strip - 오브젝트 파일에서 심볼 삭제 (0) | 2011.07.04 |
[Hack #15] addr2line - 주소에서 파일명과 행 번호 얻기 (0) | 2011.07.03 |
[Hack #14] c++filt - C++ 심볼 demangle (0) | 2011.07.03 |