---
description: ar 명령은 정적 라이브러리를 생성할 때뿐만 아니라, 정적 라이브러리의 기능을 부분적으로 변경하고자 할 경우에도 사용할 수 있다.
---

# GCC로 정적 라이브러리 파일 만들기

## **1. GCC컴파일러를 이용해 obj파일을 생성한다.**

```
$ gcc -c filename.c 
```

컴파일에 성공하면 확장자가 .o인 obj파일 (filename.o)이 생성된다.

## 2. 생성된 obj파일을 이용해 라이브러리 파일을 만든다.

```
$ ar rcs libfile.a filename.o
```

라이브러리 작성에 사용하는 명령어는 `ar` 이다.

위와 같이

```
<ar 옵션> <생성하고자 하는 라이브러리의 이름> <오브젝트 파일들의 이름>
```

을 나열한후 실행한다.

> 윈도우에서 라이브러리 파일의 확장자는 .lib이지만 리눅스에서는 .a 확장자를 지닌다.

### 2.1. 자주 쓰이는 ar 명령어 옵션

`r` : 지정한 아카이브로 모듈(obj파일) 추가. 새로운 obj파일이면 추가, 기존 파일이면 치환.

`c` : 아카이브 (라이브러리 파일) 생성.

`s` : 아카이브 인덱스를 생성.

> 아카이브 인덱스를 생성하지 않으면 링크 속도가 느려지고, 시스템 환경에 따라서는 에러가 발생.
>
> 아카이브 인덱스는 nm -s로 조회할 수 있다.

`v` : verbose mode(동작 내용 출력). 파일 크기나 갱신 시각 등 자세한 정보도 출력.

`d` : 아카이브 모듈을 삭제. 삭제할 파일이 없다면 아카이브를 건들지 않음.

> ar 명령은 정적 라이브러리를 생성할 때뿐만 아니라, 정적 라이브러리의 기능을 부분적으로 변경하고자 할 경우에도 사용할 수 있다. 라이브러리가 모두 오픈 소스로 구성되어 있지 않은 이유 등으로 정적 라이브러리를 처음부터 다시 작성할 수 없는 경우에 편리하게 이용될 수 있다.
