개발👩‍💻/시스템프로그래밍

라이브러리 생성(9-3)

gigibean 2021. 5. 7. 23:18
728x90

메인 파일이 있고, 메인파일의 헤더 파일이 있고, 헤더 파일에서 가져와서 사용해야하는 c파일들이 있다.

이 c 파일들을 묶어서 라이브러리로 만들어 사용하고 싶다.

내가 만든 라이브러리를 사용하는 방법

내가 만든 각 라이브러리들을 모아서 하나로 컴파일 한 후 불러서 사용할 수 있는데,

이를 하지 않으면 컴파일할 때

gcc -o(이름 붙여주기) mycp main.c myfopen.c ... myfput.c 

이런식으로 하나하나 불러서 컴파일해주어야 한다.

 

표준 입출력 라이브러리를 사용할 때는 따로 라이브러리를 명시하지않아도 된다.
$ gcc a.c 

 

math라이브러리를 사용할 떄는

$ gcc a.c -lm

 

curses 라이브러리를 사용할 때는

$ gcc a.c -lcurses

 

이런식으로 뒤에 붙여서 약어로 사용해주면 된다.

다른 라이브러리들도 마찬가지로 이런 형식으로 진행된다.

라이브러리가 정해진 디렉토리에 위치하지 않은 경우에는 -L 옵션뒤에 해당파일 경로를 지정해주고, -l 옵션 뒤에 해당 경로에 있는 사용할 라이브러리를 적어주면 된다.

$ gcc a.c -L/home/gigibean/mylib -labc

 

따로 만든 라이브러리 모음을 우선 하나씩 

$ gcc -c ,,.c 

 

이렇게 -c 옵션을 주어서 목적 파일로 만든다.

 

그런 다음 

 

$ ar -q libmystdio.a myfopen.o ... myfput.o

 

이런식으로 해당 목적파일들을 모아서 mystdio.a 파일로 만들면되는데, 

1) 라이브러리 파일들은 .a 확장자를 가진다.

2) 라이브러리 파일을 만들 때는 만들고 싶은 이름 앞에다가 lib을 붙여준다.

3) 라이브러리 파일을 만들기 위해서 ar -q 명령어를 사용한다.

그렇게 하면 libmystdio.a 라는 파일이 만들어진다.

 

이를 사용하기 위해서는

$ gcc -o mycp main.c -L. -lmystdio

위처럼 사용하는데,

해당 라이브러리는 .(현재 위치)에 있고

해당 디랙토리 위치에 있는 mystdio라는 라이브러리를 컴파일할 떄 같이 링크시켜서 하겠다는 명령어이다.

 

추가로 ar 이라는 명령어는 만들어진 .o파일들을 하나로 묶어주는 명령어이다.

그리고 

ar -t는 해당 묶여진 파일들을 볼 수 있는 명령어이다.(test)

ar -q는 하나로 묶어서 다음 인자로오는 이름으로 만들라는 명령어이다.

 

이렇게 ar -q 명령어를 사용해서 라이브러리를 생성할 수도 있지만,

Makefile을 만들어서 사용할 수도 있다.

OBJS = fopen.o fclose.o fput.o fget.o

lib: $(OBJS)
    ar -q libmystdio.a $(OBJS)
    @echo "libmystdio is created.."
clean:
    rm -f $(OBJS) libmystdio.a
.c.o :
    @gcc -c -w $<
    @echo gee -c $<

이렇게 makefile을 만든 후

make lib

이라고 명령어를 입력하면

자동으로 해당 명령어에 맞춰서 목척파일들과 목적파일들을 묶은 라이브러리 파일이 만들어진다.

이렇게 만들어진 라이브러리를 gcc 명령어와 -L -l  옵션들을 함꼐 사용해서 라이브러리를 추가하여 컴파일 해주면 된다.

 

반응형