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

(Answer) (Category) FreeBSD ºñ°ø½Ä Çѱ¹¾î FAQ : (Category) ÇÁ·Î±×·¡¹Ö :
°øÀ¯ ¶óÀ̺귯¸®¸¦ ¾î¶»°Ô ¸¸µéÁÒ?
´ÙÀ½Àº °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µå´Â °£´ÜÇÑ ¿¹ÀÔ´Ï´Ù.

¿ì¼± ÇöÀç µð·ºÅ丮¿¡ 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
[Append to This Answer]
Next: (Answer) FreeBSD¿¡¼­ thread¸¦ »ç¿ëÇÏ°í ½Í¾î¿ä.
This document is: http://www.kr.freebsd.org/cgi-bin/fom.cgi?file=66
[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