[libft] Linux ar 명령어 간단 정리

hyeojung·2021년 5월 20일
0

42Seoul

목록 보기
8/16
post-thumbnail
post-custom-banner

0. 정적 라이브러리 (Static Library)

라이브러리를 static 하게 만든다는 것은 링킹(linking) 단계에서 라이브러리 파일(*.lib)을 실행 바이너리에 포함시킨다는 이야기이다.

즉 라이브러리의 동작 코드가 모두 실행 바이너리에 포함되어 있어 별도의 추가적인 작업 없이 실행 바이너리만으로 라이브러리 함수들을 사용할 수 있다.

하지만 라이브러리가 동시에 여러 실행 바이너리에 포함되어 실행되는 경우 메인 메모리 공간 활용 효율이 떨어지며, 정적 라이브러리를 사용하는 프로그램이 늘어날수록 불필요하게 실행 파일들의 크기가 커지는 등의 문제가 있다.

이를 보완하는 동적 라이브러리라는 것이 존재하는데, 이것은 나중에 알아보도록 하자😅



1. ar 명령어

libft 프로젝트에서 만들어야 하는 것은 정적 라이브러리이다.
정적 라이브러리는 컴파일된 오브젝트 파일들이 하나의 아카이브로 묶여 있는 형태로, 오브젝트 파일들을 묶어 주는 명령어가 바로 ar 명령어이다.
기본적으로 아카이브를 생성할 때의 사용 예는 다음과 같다.

ar rscv libft.a file1.o file2.o ...

사실 ar 명령어는 정적 라이브러리에 국한되지 않고, 범용적인 비압축 아카이브로 사용할 수 있으나 일반적으로는 정적 라이브러리를 다루기 위해 사용된다고 한다!


2. ar 명령어의 옵션

2.1. 아카이브를 생성할 경우

ar rcus [라이브러리 이름] [오브젝트 파일들]

r : 새로운 오브젝트 파일이면 추가, 기존 파일이면 치환
c : 아카이브(라이브러리 파일) 생성, 존재하지 않는 아카이브를 작성(또는 갱신)하는 경우에도 경고 메시지를 출력하지 않음
u : 오브젝트 파일의 타임스탬프를 비교해 새로운 파일일 경우에만 치환
s : ranlib(1)과 마찬가지로 아카이브 인덱스 생성. 아카이브 인덱스를 생성하지 않으면 링크 속도가 느려지고, 시스템 환경에 따라 에러가 발생할 수도 있음

2.2. 기존 아카이브 파일에서 오브젝트 파일 제거

ar ds [라이브러리 이름] [오브젝트 파일들]

d : 아카이브 모듈을 삭제, 삭제할 파일이 없다면 동작하지 않음

2.3. 아카이브의 내용 조회

ar tv [라이브러리 이름]

t : 아카이브에 있는 파일 리스트 출력
v : 자세한 내용을 보여주는 verbose 모드로, 이 옵션을 이용하면 파일 크기나 갱신 시각 등의 상세 정보도 출력

2.4. 아카이브에서 파일 추출

ar xv [라이브러리 이름]

x : 아카이브에서 오브젝트 파일 추출
v : 추출한 파일의 파일명 출력

profile
응애 나 애기 개발자
post-custom-banner

0개의 댓글