A: 다음 예를 보아 주십시오.
먼저 같은 디렉토리에 shared.c, test_shared.c를 아래와 같이 작성합니다.
shared.c의 내용
-----------------------여기서부터----------------------
int
shared(int a)
{
a *= 5;
return(a);
}
------------------------여기까지-----------------------
test_shared.c의 내용
-----------------------여기서부터----------------------
#include <stdio.h>
extern int shared(int);
int
main(void)
{
int a;
printf("number ?:");
scanf("%d", &a);
printf("result: %d\n", shared(a);
return(0);
}
------------------------여기까지-----------------------
먼저 공유 라이브러리를 구성하는 오브젝트를 만듭니다. 옵션 -fpic는 공유
라이브러리를 구성하는 오브젝트를 만들기 위해서 필요합니다.
$ gcc -o shared.o -fpic -c shared.c
다음에 공유 라이브러리를 만듭니다.
$ ld -Bshareable -o libshared.so.1.0 shared.o
이 공유 라이브러리를 사용하는 실행 프로그램을 컴파일합니다.
$ gcc -L. -lshared test_shared.c
필요에 따라 현재 작업 디렉토리를 공유 라이브러리 검색 패스(LD_LIBRARY_
PATH)에 추가합니다.
$ $LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
자 실행해 봅시다. "number ?:" 다음에 숫자를 입력해 봅니다. 예를 들어 5
를 입력했습니다.
$ ./a.out
number ?:5
result: 25
정말로 동적 링크가 이루어져 있는가를 확인하려면, shared.c를 변경하여 l
ibshared.so.1.0을 재구성한 후, a.out을 실행하여 그 변경이 반영되었는지
살펴보면 됩니다.
예를 들어 shared.c의 "a *=5;"를 "a *= 10;"으로 변경하는 것입니다.
-fpic를 붙이지 않고 컴파일하게 되면, 실행은 되지만 실제로 공유가 되지
못하게 되므로 반드시 -fpic을 주시기 바랍니다.sonnet |