본문 바로가기

개발/Linux

실습 2 : 정적 라이브러리

반응형

1. 각 함수마다 소스 파일 만들기 

- fred.c

#include <stdio.h>

void fred(int arg)

{

printf("fred: we passed %d\n", arg);

}

- bill.c

#include <stdiio.h>

void bill(char *arg)

{

printf("bill: we passed %s\n", arg);

}


2. 함수들을 개별적으로 -c옵션을 주어 컴파일 해서 목적파일을 만듬. 

(-c옵션을 주지 않으면 컴파일러는 실행파일을 만드려고 하고 main함수가 없기 때문에 컴파일이 실패하게 된다.)

gcc -c bill.c fred.c  => 목적파일 생성

ls *.o                     => 목적파일 확장자인 .o를 가진 파일을 찾아 목적파일이 제대로 만들어 졌는지확인 

billo.o fred.o            => .c파일과 같은 이름을 가진 .o파일이 보여지면 성공



3. bill과 fred를 포함하는 헤더파일을 만든다. 

- lib.h

/*

이것은 lib.h 파일이다. 프로그램이 사용할 fred 함수와 bill함수를 선언

*/

void bill(char *);

void fred(int);


4. 라이브러리 헤더파일을 포함하고 라이브러리 함수를 호출하는 프로그램을 만든다.

-program.c

#include <stdlib.h>

#include "lib.h"

int main()

{

bill("Hello World");

exit(0);

}


5. 프로그램을 컴파일하고 시험하기. 아직 라이브러리 파일을 만들지 않았으므로 목적파일을 직접 링크하여 빌드한다.

gcc -c program.c

gcc -o

program program.o bill.o

./program

bill: we passed Hello World


6. 라이브러리 파일 만들기 .ar프로그램을 이용하여 목적 파일들을 합친 라이브러리 파일을 생성한다. 

   (ar은 archive의 줄임말으로 개별 목적 파일들을 하나의 파을로 생성 관리 하는 프로그램이다)

ar crv libfoo.a bill.o fred.o   => bill.o와 fred.o를 담은 libfoo.a라는 라이브러리 파일을 생성



7. 생성된 라이브러리 파일을 사용하려면 라이브러리의 내용을 담을 표를 만들어야 한다. 일부 시스템의 경우에 필요하지만 해줘도 문제가 되지 않으니 하자. (GNU 소프트웨어 개발도구를 사용하는 경우엔 이과정이 필요 없다.)

 ranlib libfoo.a


8. 생성된 라이브러리 파일을 이용하여 program.c파일을 컴파일 해보자.

gcc -o program program.o libfoo.a

./program


-l을 이용하여 라이브러리를 지정하여 만들기

gcc -o program program.o -L. -lfoo

=> -L 라이브러리를 찾아라 / (.)-> 현재 디렉토리에서 /-lfoo ->libfoo.so를 이용하라 



반응형

'개발 > Linux' 카테고리의 다른 글

파일 다루기 - 시스템 호출과 장치 드라이버  (0) 2014.10.10
파일 다루기 - 리눅스 파일 구조  (0) 2014.10.10
개발 시스템의 개요  (0) 2014.10.09
실습 1 : Hello World  (0) 2014.10.09
리눅스 프로그래밍  (0) 2014.10.09