반응형


우선 기본적으로 유닉스에서 정적 라이브러리를 만드는 방법은 간단하다.

ar 를 사용해서 생성하는데 이는 AIX 뿐만 아니라 모든 유닉스/리눅스가 동일할 것이다. 

단 ar 옵션의 차이는 있다.


아래와 같은 함수가 포함된 3개의 파일을 정적 라이브러리로 만들어서 실제 사용하는 부분까지 확인해보도록 하자.


파일 명 : f1.c

-------------------------------------------------------

#include<stdio.h>

int funcreturnzero()

{

return 0;

}

-------------------------------------------------------


파일 명 : f2.c

-------------------------------------------------------

#include<stdio.h>

void funcnewline()

{

printf("\n");

}

-------------------------------------------------------


파일 명 : f3.c

-------------------------------------------------------

#include<stdio.h>

int funcreturnone()

{

return 1;

}

-------------------------------------------------------


1) c 파일 오브젝트 파일로 컴파일

$ xlc -c f1.c f2.c f3.c 

$ ls

f1.o, f2.o, f3.o 


2) libtest.a 라이브러리로 세 개의 파일을 아카이브

$ ar -vq libtest.a f1.o f2.o f3.o

ar: 아카이브 파일 libtest.a을(를) 작성합니다.

q - f1.o

q - f2.o

q - f3.o

$ ls

f1.o, f2.o, f3.o libtest.a


3) 아카이브 내부 오브젝트 파일을 보려면 -t 옵션을 주면 되며 -v 옵션을 주면 상세 옵션이 추가적으로 표시된다.

$ ar -t libtest.a

f1.o

f2.o

f3.o

$ ar -v -t libtest.a

rw-r--r--   202/201      956  1월  9일 15:42 2014 f1.o

rw-r--r--   202/201     1125  1월  9일 15:42 2014 f2.o

rw-r--r--   202/201      953  1월  9일 15:42 2014 f3.o


만약 기존의 libtest.a 라이브러리가 없었다면 위 명령은 libtest.a 라이브러리를 새로 만들고 여기에 f1.o, f2.o, f3.o 오브젝트의 복사본을 넣는다. 

그러나 기존의 libtest.a 라이브러리가 이미 있었다면 이 명령은 라이브러리 내에 함수 정의나 변수가 겹치는지 검사하지 않은 채로 기존의 라이브러리 뒤에 오브젝트 파일을 추가한다. -v 옵션은 verbose 옵션이며 ar 명령이 진행되는 상태를 보여준다.


4) 아카이브에 새 오브젝트를 추가하러나 기존 멤버를 바꾸려면 -r 옵션을 사용하면 된다.

$ ar -v -r libtest.a f1.o f4.o


5) 바뀐 멤버를 갱신하려면 -r -u 옵션을 추가.

$ ar -v -r -u libtest.a f2.o 


6) 아카이브 내부 멤버 오브젝트를 추출하려면 -x 옵션.

$ ar -v -x libtest.a f1.o f3.o


7) 아카이브 내부 멤버 오브젝트를 제거하려면 -d 옵션.

$ ar -v -d libtest.a f2.o


단 해당 부분은 모두 정적 오브젝트에 해당한다. 
















반응형

+ Recent posts