´ÙÀ½Àº °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µå´Â °£´ÜÇÑ ¿¹ÀÔ´Ï´Ù.
¿ì¼± ÇöÀç µð·ºÅ丮¿¡ 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
´ÙÀ½¿¡ °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µé°í,
FreeBBSD 2.2.x (a.out)
$ ld -Bshareable -o libshared.so.1 shared.o
FreeBSD 3.x (elf)
$ gcc -shared -o libshared.so.1 -Wl,-S,-soname=libshared.so.1,--whole-archive shared.o
´ëÇ¥¸íÀ¸·Î ¸µÅ©ÇÕ´Ï´Ù.
$ ln -s libshared.so.1 libshared.so
ÀÌ °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â ½ÇÇà ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÕ´Ï´Ù.
$ gcc -L. -lshared test_shared.c
°øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇØ ÄÄÆÄÀÏÇÑ ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ·Á¸é ÇØ´ç °øÀ¯ ¶ó
À̺귯¸®°¡ À§Ä¡ÇÑ µð·ºÅ丮°¡ °øÀ¯ ¶óÀ̺귯¸® °Ë»ö ÆÐ½º(LD_LIBRARY_PATH
)¿¡ µé¾î ÀÖ¾î¾ß ÇÕ´Ï´Ù.
ÀÚ ½ÇÇàÇØ º¾½Ã´Ù. "number ?:" ´ÙÀ½¿¡ ¼ýÀÚ¸¦ ÀÔ·ÂÇØ º¾´Ï´Ù. ¿¹¸¦ µé¾î 5
¸¦ ÀÔ·ÂÇß½À´Ï´Ù.
$ env LD_LIBRARY_PATH=$LD_LIBRARY_PATH:. ./a.out
number ?:5
result: 25
Á¤¸»·Î µ¿Àû ¸µÅ©°¡ ÀÌ·ç¾îÁ® Àִ°¡¸¦ È®ÀÎÇÏ·Á¸é, shared.c¸¦ º¯°æÇÏ¿© l
ibshared.so.1À» À籸¼ºÇÑ ÈÄ a.outÀ» ½ÇÇàÇÏ¿© ±× º¯°æÀÌ ¹Ý¿µµÇ¾ú´ÂÁö »ì
Æìº¸¸é µË´Ï´Ù.
¿¹¸¦ µé¾î shared.cÀÇ "a *=5;"¸¦ "a *= 10;"À¸·Î º¯°æÇÏ´Â °ÍÀÔ´Ï´Ù.
-fpic¸¦ ºÙÀÌÁö ¾Ê°í ÄÄÆÄÀÏÇÏ°Ô µÇ¸é, ½ÇÇàÀº µÇÁö¸¸ ½ÇÁ¦·Î °øÀ¯°¡ µÇÁö
¾ÊÀ¸¹Ç·Î ¹Ýµå½Ã -fpic¸¦ Áֽñ⠹ٶø´Ï´Ù.
ELF Çü½ÄÀÇ °øÀ¯ ¶óÀ̺귯¸®¿¡ ´ëÇÑ ÁÖÀÇ
1. a.out°ú ´Þ¸® ELF Çü½ÄÀÇ °øÀ¯ ¶óÀ̺귯¸®¿¡¼ ¹öÀü ¹øÈ£´Â ¸ÞÀÌÀú 1°³
»ÓÀÔ´Ï´Ù.
2. ½ÇÇà ÆÄÀÏ ÀÛ¼º½Ã¿¡ °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸µÅ©ÇÒ °æ¿ì lib*.so¶ó´Â À̸§ÀÇ
ÆÄÀÏÀ» ã¾Æ¿Í¼ ¸µÅ©ÇÏ·Á°í ÇÕ´Ï´Ù. ½ÇÁ¦ÀÇ °øÀ¯ ¶óÀ̺귯¸®·ÎºÎÅÍ ½É
º¼¸¯ ¸µÅ©¸¦ °É¾î ÁֽʽÿÀ.
3. ½ÇÇà ÆÄÀÏ¿¡´Â -sonameÀ¸·Î ÁöÁ¤ÇÑ À̸§ÀÌ ÀÖÀ¸¸é DT_SONAMEÀ¸·Î ¼³Á¤µÇ
¾î ½ÇÇà½Ã¿¡´Â ±× À̸§À¸·Î °øÀ¯ ¶óÀ̺귯¸®¸¦ °Ë»öÇÏ¿© µ¿Àû ¸µÅ©¸¦ ÇÕ
´Ï´Ù.
µû¶ó¼ °øÀ¯ ¶óÀ̺귯¸® ÀÛ¼º½Ã¿¡ -sonameÀ» ÁöÁ¤ÇØ µÎ¸é ÇÁ·Î±×·¥ ½ÇÇà
½Ã¿¡ lib*.soÀÇ ¸µÅ©°¡ ¾îµð·Î µÇ¾î ÀÖ´øÁö °£¿¡, ÄÄÆÄÀϽÿ¡ ¸µÅ©ÇÑ ¹ö
ÀüÀÇ °øÀ¯ ¶óÀ̺귯¸®°¡ »ç¿ëµË´Ï´Ù.
-sonameÀ» ÁöÁ¤ÇÏÁö ¾Ê°í °øÀ¯ ¶óÀ̺귯¸®¸¦ ÀÛ¼ºÇÏ¸é ½ÇÇà ÆÄÀÏ¿¡ lib*
.so¶ó´Â À̸§ÀÌ ±â·ÏµÇ±â ¶§¹®¿¡, ³ªÁß¿¡ º¹¼öÀÇ ¹öÀüÀÇ °øÀ¯ ¶óÀ̺귯
¸®¸¦ º´Çàȳ¼ °ü¸®ÇÒ Çʿ䰡 ³ª¿ÔÀ» ¶§ °ï¶õÇÏ°Ô µÉ °¡´É¼ºÀÌ ÀÖ½À´Ï´Ù.
4. ldÀÇ -R ¿É¼ÇÀÌ -rpath·Î ¹Ù²î¾ú½À´Ï´Ù.sonnet |