프로그램

[gcc]라이브러리 생성 및 사용 (간단)

shellbt 2006. 11. 22. 10:13
라이브러리 파일을 만들면, 파일에 함수 object와 목록(index)을 포함 시켜야 한다.

일단 라이브러리 파일을 만들어 보자
작업디렉토리는 "mylib"이다

plus.c>>
int plus(int x, int y)
{
    return x+y;
}

minus.c>>
int minus(int x, int y)
{
    return x-y;
}


위의 내용을 참고해서 라이브러리의 object가 될 2개의 파일을 만들자

$ gcc -c plus.c minus.c
>> plus.o minus.o가 만들어진다.

일단 라이브러리 파일 생성 준비는 끝났다.
이제 라이브러리 파일을 만들자, 만들 때는 "ar" 명령어와 옵션으로 "r"을 이용해서 라이브러리 파일인 ".a"파일을
만든다.

$ ar r libmy.a plus.o minus.o
>libmy.a 는 생성될 라이브러리 파일의 이름이다.

파일이 생성됐으면, 이제 해당 라이브러리 파일에 목록(index)을 추가하자
"ar"명령어에 옵션은 "s"다

$ ar s libmy.a

이로서, libmy.a라는 plus(),minus()함수를 가지고 있는 라이브러리를 만들었다.
이제 이 라이브러리를 이용해서 프로그램을 만들어 보자.

test.c>>
#include <stdio.h>
int plus(int x,int y);
int minus(int x, int y);

main()
{
    /* libmy.a에 있는 함수 plus(), minus()을 사용했다. */
    printf("%d %d\n", plus(2,3), minus(2,3));
}

자~ 이제 컴파일 해보자
$ gcc test.c -lmy
>>-l 옵션은 표준 라이브러리가 아닌 라이브러리를 사용 할 때 쓰는 옵션이다.
>> 사용법은 파일이름에서 "lib", ".a"를 제거한 이름을 -l 다름에 바로 써 주면 된다.

==위의 명령어를 실행하면 에러가 나올 것이다.
== 이유는 간단하다. 컴파일러가 libmy.a가 어디에 있는 녀석인지 모르기 때문이다.

그럼, 비정규 라이브러리를 사용할 때 해당 라이브러리가 어디 있는지 알려주는 녀석 "-L"을 알아보자
$ gcc test.c -lmy -L./
>> "-L./" : "-L" 다음에 라이브러리 파일이 있는 위치를 써주면 된다. 여기서 위치는 현재 디렉토리라는 뜻이다.