확장자별 라이브러리 종류
1) .a : 리눅스 / 정적 라이브러리
2) .so : 리눅스 / 동적 라이브러리
3) .lib: 윈도우 / 정적 라이브러리
4) .dll: 윈도우 / 동적 라이브러리
이 글에서는 "*.a" 에 대한 내용을 작성한다.
정적 라이브러리는 실행 파일에 완전히 포함되어 버리고,
동적 라이브러리는 실행 될 때 해당 라이브러리를 불러오는 형식.
% gcc -c util1.c util2.c
: .c 파일을 컴파일
% ls
util1.c util1.o util2.c util2.o
: .o 파일 생성
% ar rscv libmyutil.a util1.o util2.o
: .o 파일을 합치기
% ls
libmyutil.a util1.c util1.o util2.c util2.o
: libmyutil.a 의 정적 라이브러리 생성
ar rscv [LIB_NAME][OBJS] : 새로운 정적 라이브러리 생성
ar rus [LIB_NAME][OBJS] : 기존 정적 라이브러리에 새로운 오브젝트 파일 추가
ar ds [LIB_NAME][OBJS] : 기존 정적 라이브러리에서 오브젝트 파일 제거
ar x [LIB_NAME] (([OBJS]): 정적 라이브러리에서 (해당)오브젝트 파일 추출
ar t [LIB_NAME] : 정적 라이브러리에 있는 파일 리스트 출력
현재 위의 명령으로 libmyutil.a 라이브러리가 생성된 상태라고 하자.
이때 우린 main.c 함수에서 libmyutil.a 라이브러리 내의 함수를 사용했다.
그러므로 libmyutil.a 라이브러리를 링크하여 실행파일을 만들어야 하는 상황.
%gcc -o main.o -c main.c -I [libmyutil.a에서 사용한 함수의 헤더경로]
설명 : main.c 함수를 재료로 삼아 필요 headeer의 경로를 참조하여(대문자 i 옵션) main.o의 이름으로 컴파일. main.o가 만들어 짐.
%gcc -o myproject main.o -L [libmyutil.a 파일의 경로] -l myutil
설명 : main.o를 재료로 삼아 해당 라이브러리 경로에 있는(-L) 해당 라이브러리를 링크하여(-l) 실행파일 생성.
myproject(실행파일) 이 만들어짐.
!!!주의!!!
-l 옵션 사용시 앞의 lib와 뒤의 .a는 생략.