Korea FreeBSD Users Group
Korea FreeBSD Users Group News, Internal, Projects, Home
Software, Support, Documentation

(Answer) (Category) FreeBSD 비공식 한국어 FAQ : (Category) Trash :
공유 라이브러리를 어떻게 만들죠?
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
[Append to This Answer]
Previous: (Answer) New Item
Next: (Answer) New Item
This document is: http://www.kr.freebsd.org/cgi-bin/fom.cgi?file=62
[Search] [Appearance]
This is a Faq-O-Matic 2.719.

Copyright © 1998-2003 Korea FreeBSD Users Group.
All rights reserved. webmaster at kr.FreeBSD.org
Powered by FreeBSD