CnUnix

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ CnUnix ] in KIDS
글 쓴 이(By): terzeron (microkid)
날 짜 (Date): 2002년 5월  1일 수요일 오후 05시 07분 04초
제 목(Title): Re: [질문] ....


답은 바로 환경 변수에 있습니다.

LD_LIBRARY_PATH나 LD_PRELOAD 변수를 이용하면 라이브러리를
동적으로 선택할 수 있습니다.

그리고 그 라이브러리를 구성하는 오브젝트의 소스 파일에
함수 포인터를 이용해서 원하는 함수의 symbol을 대입해
주면 됩니다. 이러면 해당 라이브러리를 선택할 때 해당
함수를 결정할 수 있게 됩니다.

예를 들어, 3배와 4배의 값을 반환하는 함수를 바꿔가면서
쓴다고 하면...

---test1.c--------------
int quadruple(int a)
{
        return a * 4;
}

void (*a) = quadruple;
---test2.c -----------
int triple(int a)
{
        return a * 3;
}

void (*a) = triple;
---test.c--------------
#include <stdio.h>
int (*a)();

int main()
{
        printf("%d\n", a(3));
        return 0;
}

test1.c와 test2.c를 각각의 so로 만들고 위의 환경변수를 이용하여
따로 동적으로 링크해서 사용하면 되겠죠. 
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.