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 |