리눅스 환경에서 라이브러리 만드는 방법입니다. 
 
 
 
샘플 코드
 
 
 
mysum.h
 
int mysum(int a, int b);
 
 
mysum.c
 
#include "mysum.h"

int mysum(int a, int b)
{
    return a+b;
}
 
 
오브젝트 파일 만들기 (.o)
gcc를 통해서 오브젝트 파일을 만든다. 
 
[root@localhost libtest]# gcc -c mysum.c
 
 
정적 라이브러리 만들기 
 -ar 이라는 명령어를 이용해서 라이브러리 아카이브 파일 만듬
[root@localhost libtest]# ar rc libmysum.a mysum.o
 
ar 옵션
r :  libmysum 이라는 라이브러리 아카이브에 새로운 오브젝트를 추가한다는 옵션
c :  아카이브가 존재하지 않은 경우 생성 하라는 옵션
 
 
라이브러리 테스트 코드 
 
print_sum.c
 
#include "mysum.h"
#include <stdio.h>

int main()
{
 int result =mysum(1,2);
 printf("resut:%d\n", result);
 return 0;
}
 
 
gcc로 다음과 같이 빌드를 하면 실행 파일 생성
[root@localhost libtest]# gcc -o print_sum print_sum.c -L./ -lmysum
 
-L 옵션은 라이브러리 위치를 알려 준다. 
라이브러리 이름에 "lib"와 "a"를 제외한 나머지 이름을 입력해준다. 
표준 라이브러리는 -L을 사용하지 않아도 된다. 
 
 
공유 라이브러리 만들기 
코드는 위와 동일 하다. 단지 라이브러리 제작 방법만 변경 된다. 
공유라이브러리는 보통 .so의 확장자를 가진다. 


[root@localhost libtest]# gcc -shared -o libmysum.so mysum.o
[root@localhost libtest]# gcc -o print_sum print_sum.c -L./ -lmysum
[root@localhost libtest]# ./print_sum
./print_sum: error while loading shared libraries: libmysum.so: cannot open shared object file: No such file or directory
so 파일을 찾지 못해서 실행이 안된다.  LD_LIBRARY_PATH 환경 변수에 so 가 있는 폴더를 추가 하거나, /lib 또는 /usr/lib에 파일을 복사하면 된다.
 
LD_LIBRARY_PATH 추가 방법은
[root@localhost libtest]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/test/libtest
 
 
ldd 명령어를 사용해서 공유 라이브러리 의존 관계를 확인 할 수 있다. 
 
[root@localhost libtest]# ldd print_sum
    linux-vdso.so.1 =>  (0x00007fff31bfe000)
    libmysum.so (0x00007f1c7351e000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f1c73157000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f1c73721000)