· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
Linuxdoc Sgml/Program-Library-HOWTO

<!doctype linuxdoc system>
<article>
<title>
ÇÁ·Î±×·¥ ¶óÀ̺귯¸® ÇÏ¿ìÅõ
<author> David A. WheelerÁöÀ½
<date> ¹öÀü 0.60, 2000³â 4¿ù 27ÀÏ
<trans>¹ø¿ª : Ȳ Áø Èñ(<url url="mailto:jeenee@soback.kornet.net" name="jeenee@soback.kornet.net">)
<tdate> 2000³â 5¿ù 
<abstract>
 ÀÌ ÇÏ¿ìÅõ ¹®¼­´Â ÇÁ·Î±×·¡¸Ó°¡ ¾î¶»°Ô ¸®´ª½ºÈ¯°æ¿¡¼­ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®
¸¦ »ý¼ºÇÏ°í »ç¿ëÇÒ¼ö ÀÖ´ÂÁö¸¦ ´Ù·ç°í ÀÖÀ¸¸ç ¶óÀ̺귯¸®¿¡´Â Á¤Àû 
¶óÀ̺귯¸®, °øÀ¯ ¶óÀ̺귯¸® ¹× µ¿Àû(DL) ¶óÀ̺귯¸®°¡ ÀÖ´Ù. 
</abstract>
<toc>

<sect> °³¿ä<p>
 ÀÌ ÇÏ¿ìÅõ ¹®¼­´Â ÇÁ·Î±×·¡¸Ó°¡ ¾î¶»°Ô   GNUÀÇ Åø¼ÂÀ» ÀÌ¿ëÇÏ¿© ¸®´ª½º¿¡
¼­ ÇÁ·Î±×·¥ ¶óÀ̺귯¸®¸¦ »ý¼ºÇϰí ÀÌ¿ëÇÒ¼ö ÀÖ´ÂÁö¸¦ ´Ù·é´Ù. ÇÁ·Î±×·¥ 
¶óÀ̺귯¸®¶õ ´Ü¼øÇÏ°Ô º¸¸é ³ªÁß¿¡ ¾î¶² ÇÁ·Î±×·¥  Äڵ忡 ³¢¿ö³Ö¾îÁú¼ö ÀÖ´Â ÄÄ
ÆÄÀÏµÈ ÄÚµå(±×¸®°í µ¥ÀÌÅÍ)°¡ µé¾îÀÖ´Â ÆÄÀÏÀ̸ç,  À̸¦ ÅëÇØ¼­ ÇÁ·Î±×·¥µéÀº 
´õ¿í ¸ðµâÈ­µÉ¼ö ÀÖÀ¸¸ç, ÀçÄÄÆÄÀÏÀÌ ºü¸£¸ç, °»½ÅÀÌ ¿ëÀÌÇØÁø´Ù. ÇÁ·Î±×·¥  
¶óÀ̺귯¸®´Â Á¤Àû, °øÀ¯, µ¿Àû(DL) ¶óÀ̺귯¸®ÀÇ ¼¼°¡Áö ÇüÅ·Π´ëº°µÈ´Ù.
 ¸ÕÀú ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ±âÀü¿¡ ¹Ì¸® ½ÇÇàÇÁ·Î±×·¥¿¡ ¼³Ä¡µÇ´Â  Á¤Àû  
¶óÀ̺귯¸®°¡ ´Ù·ç¾î Áú°ÍÀ̸ç, ±× ´ÙÀ½Àº ÇÁ·Î±×·¥ ½ÃÀ۽ÿ¡ ÀûÀçµÇ¾î ¿©·¯  ÇÁ·Î±×
·¥¿¡ ÀÇÇØ °øÀ¯µÇ´Â °øÀ¯ ¶óÀ̺귯¸®, ±×¸®°í  ¸¶Áö¸·À¸·Î ÇÁ·Î±×·¥ ½ÇÇàÁßÀÇ   
¾î¶² ¼ø°£¿¡µµ ÀûÀç  ¹× »ç¿ëÀÌ °¡´ÉÇÑ µ¿Àû ¶óÀ̺귯¸®¸¦ ´Ù·ê °ÍÀÌ´Ù. µ¿Àû 
¶óÀ̺귯¸®¸¦  ´Ù¸¥ ¾î¶² ÇÑ  ¶óÀ̺귯¸®ÀÇ Æ÷¸ËÀ̶ó°í  º¸±â´Â ¾î·Á¿ï  °ÍÀÌ
´Ù.(Á¤Àû ¶óÀ̺귯¸®ÀÌ°Ç °øÀ¯ ¶óÀ̺귯¸®ÀÌ°Ç ¸ðµÎ µ¿Àû  ¶óÀ̺귯¸®·Î  »ç¿ë
°¡´ÉÇÔ) ´ë½Å µ¿Àû ¶óÀ̺귯¸®°¡ ´Ù¸¥Á¡Àº  ±×°ÍÀÌ ÇÁ·Î±×·¡¸Ó¿¡ ÀÇÇØ¼­ ÀÌ¿ë
µÇ´Â ¹æ½Ä¿¡ ÀÖ´Â °ÍÀÌ´Ù. ÀÌ Ã¥ÀÇ ´Ù¸¥ Àå¿¡´Â ±×°ÍÀÇ ¿¹µé°ú Âü°íÇÒ ¸¸ÇÑ ¹®
ÇåµéÀ» ½ÇÀ» °ÍÀÌ´Ù. 

 ÀÌ Ã¥Àº ÀÌÁ¦´Â  ´ëºÎºÐÀÇ  ¸®´ª½º ¹èÆ÷º»¿¡¼­ »ç¿ëµÇ´Â ELF  Æ÷¸ËÀÇ  ½ÇÇà
ÇÁ·Î±×·¥°ú ¶óÀ̺귯¸®¸¸À» ´Ù·ê °ÍÀÌ´Ù. GNUÀÇ gcc  Åø¼ÂÀº ELF¿Ü¿¡  ´Ù¸¥ 
ÇüÅÂÀÇ  ¶óÀ̺귯¸®µµ ´Ù·ê¼ö Àִµ¥ ¾ÆÁ÷µµ ´ëºÎºÐÀÇ  ¸®´ª½º ¹èÆ÷ÆÇÀº ÀÌ¹Ì 
Åð¹°ÀÌµÈ  a.outÇüÀÇ Æ÷¸ËÀ» ´Ù·ç°í´Â ÀÖ´Ù, ÇÏÁö¸¸  À̰ÍÀº ÀÌÃ¥ÀÇ ¹üÀ§¸¦ ¹þ
¾î³­ ¾ê±âÀÌ´Ù. 

 ¾î¶² »ç¶÷µéÀº µ¿Àû ¸µÅ© ¶óÀ̺귯¸®(DLL)¶õ   ¿ë¾î¸¦ »ç¿ëÇÏ¿© °øÀ¯
¶óÀ̺귯¸®¸¦ ĪÇϱ⵵ Çϰí,  ¶§·Ð Á¤ÀûÀÌ°Ç °øÀ¯°Ç  µ¿Àû ¶óÀ̺귯¸®·Î »ç¿ëµÉ  ¶§ 
DLLÀ̶ó ĪÇϱ⵵ ÇÏ°í ¶Ç, ¶§·Î´Â À§ÀÇ µÎ Á¶°ÇÀ» ¸ðµÎ ¸¸Á·ÇÒ ¶§ DLLÀ̶õ 
¿ë¾î¸¦ ¾²±âµµ Çϳª À̰ÍÀº º°·Î  Áß¿äÇÑ ¾ê±â°¡ ¾Æ´Ï´Ù. À̹®¼­´Â ´ç½ÅÀÌ ¾î
¶² Àǹ̸¦  ¼±ÅÃÇϰǰ£¿¡ ¸®´ª½º¿¡¼­ÀÇ DLLÀ» ´Ù·ïÁÙ °ÍÀÌ´Ù.

 ¸¸¾à ¿©·¯  ½Ã½ºÅÛ¿¡ Æ÷ÆÃµÉ¼ö  ÀÖ´Â  ÇÁ·Î±×·¥À» °³¹ßÇÏ·Á  ÇÑ´Ù¸é LINUX 
ToolÀ» ¹Ù·Î »ç¿ëÇÏ´Â °Í º¸´Ù´Â GNU LibtoolÀÇ »ç¿ëÀ» °í·ÁÇØ º¸±æ  ¹Ù¶õ´Ù.  
GNU LibtoolÀº °øÀ¯ ¶óÀ̺귯¸®ÀÇ »ç¿ë(»ý¼º°ú ¼³Ä¡µî)ÀÇ º¹À⼺À»  ÀϰüµÇ°í 
À̽ÄÀûÀÎ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ¼­ Á¦°ÅÇØÁÖ´Â ÀüÇüÀûÀÎ  ¶óÀ̺귯¸® Áö¿ø ½ºÅ©¸³
Æ®ÀÌ´Ù. ¸®´ª½º¿¡¼­  GNU LibtoolÀº ToolµéÁß¿¡¼­ ÃÖ»óÀ§¿¡ ±¸ÇöµÇ¾î ÀÖÀ¸¸ç 
±× »ç¿ë°ü·Êµµ ÀÌ  ÇÏ¿ìÅõ ¹®¼­¿¡ ±â¼úµÇ¾îÀÖ´Ù. DL  ¶óÀ̺귯¸®ÀÇ  À̽İ¡´É
ÇÑ ÀÎÅÍÆäÀ̽º  ±¸ÇöÀ» À§Çؼ­´Â ¿©·¯°¡Áö À̽ļº  ±¸ÇöÀåÄ¡°¡ ÀÖÀ¸¸ç ±×  Áß
GNU Libtool Àº "Libltdl" ÀÌ Æ÷ÇԵǾî ÀÖ´Ù. ´Ù¸¥ ¼±ÅÃÀ¸·Î´Â glib ¶óÀ̺귯¸®
(glibc¿Í È¥µ¿ÇÏÁö¸»°Í)ÀÇ µ¿Àû ¸ðµâ ÀûÀçÀÇ  À̽ļºÁö¿ø±â´ÉÀ» »ç¿ëÇÒ¼ö ÀÖ´Ù. 
±×°ÍÀ» »ç¿ëÇÏ·Á ÇÑ´Ù¸é ÀÌ  ¹®¼­¸»°í [10]<url url="http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.html" 
name="developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.html"> ¿¡¼­ º¸±æ ¹Ù¶õ´Ù. ´Ù½Ã  Çѹø ¸»
Çϰǵ¥ ¸®´ª½º¿¡¼­ ¶óÀ̺귯¸®ÀÇ »ç¿ë¿¡ °üÇÑ Á¦¹Ý  ±â´ÉµéÀÇ ±¸ÇöÀÌ ÀÌ ¹®¼­
¿¡¼­ ±â¼úµÉ °ÍÀÌ¸ç ¸®´ª½º¿ë Äڵ带 °³¹ßÁßÀ̰ųª µð¹ö±ë ÁßÀ̶ó¸é À̹®¼­ÀÇ 
³»¿ëÀÌ À¯¿ëÇÒ°ÍÀÌ´Ù.  
 ÀÌ ÇÏ¿ìÅõ ¹®¼­ÀÇ ¸ÞÀÎÁÖ¼Ò´Â [11]<url url="http://www.dwheeler.com/program-library" name="www.dwheeler.com/program-library">  
À̸ç LDP([12]<url url="http://www.linuxdoc.org" name="http://www.linuxdoc.org">)¿¡   Á¦°øµÈ´Ù. ÀúÀÛ±ÇÀÚ´Â  David  A. 
WheelerÀ̸ç GPLÀÇ ¶óÀ̼¾½º¸¦ µû¸¥´Ù.
</p>

<sect> Á¤Àû ¶óÀ̺귯¸®<p>
 Á¤Àû ¶óÀ̺귯¸®´Â ´ÜÁö Åë»óÀÇ ¿ÀºêÁ§Æ® È­ÀÏÀ» ¸ðÀº°ÍÀÌ´Ù. Åë»óÀûÀ¸·Î  Á¤
Àû ¶óÀ̺귯¸®´Â .a¶ó´Â Á¢¹Ì¾î·Î ³¡³­´Ù.  ÀÌ  ¿ÀºêÁ§Æ® ÁýÇÕÀº  ar(archiver) 
ÇÁ·Î±×·¥¿¡ ÀÇÇØ¼­ »ý¼ºµÈ´Ù. Á¤Àû ¶óÀ̺귯¸®´Â °øÀ¯ ¶óÀ̺귯¸®°¡ °¡Áö´Â Àå
Á¡µé ¶§¹®¿¡ ÀÌÁ¦´Â ¿¾³¯Ã³·³ ±×·¸°Ô ¸¹ÀÌ »ç¿ëµÇ¾î ÁöÁö´Â ¾Ê´Â´Ù.  ±×·¸Áö¸¸ 
¾ÆÁ÷µµ »ç¿ëµÇ¾î Áö°í ÀÖ°í ¿ª»çÀûÀ¸·Î °¡Àå¸ÕÀú Á¸ÀçÇß°í ¼³¸íÀÌ °£´ÜÇÏ´Ù.
 Á¤Àû ¶óÀ̺귯¸®´Â ÀçÄÄÆÄÀϾøÀÌ ÇÁ·Î±×·¥¿¡ ¸µÅ©µÉ¼ö Àֱ⠶§¹®¿¡ ÀçÄÄÆÄÀÏ
¿¡ ÇÊ¿äÇÑ ½Ã°£ÀÌ Àý¾àµÉ¼ö ÀÖ´Ù.  ¿äÁòÀº ÄÄÇ»ÅÍÀÇ ºü¸¥ ½ÇÇà½Ã°£¶§¹®¿¡ ÀÌ·± 
ÀçÄÄÆÄÀÏ¿¡  µå´Â ½Ã°£ Àý¾àÀº ¿¾³¯Ã³·³  ±×·¸°Ô Áß¿äÇÑ ÀÌÀ¯°¡  µÉ¼ö´Â ¾øÀ» 
°ÍÀÌ´Ù. Á¤Àû ¶óÀ̺귯¸®´Â °³¹ßÀÚµéÀÌ ¼Ò½ºÄÚµåÀÇ Àç°ø¾øÀÌ  ÇÁ·Î±×·¡¸Óµé·Î 
ÇÏ¿©±Ý ¸µÅ©ÇÏ¿© »ç¿ëÇϵµ·Ï ÇÒ¶§´Â °¡²û¾¿ À¯¿ëÇÑ °ÍÀ̵ȴÙ.  (À̶§ 
¶óÀ̺귯¸®ÀÇ  ÆÇ¸ÅÀÚ´Â ÀÌÀÍÀÌÁö¸¸ ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇϰíÀÚ  ÇÏ´Â ÇÁ·Î±×·¡¸Óµé¿¡°Ô
´Â À¯¿ëÇѰÍÀÌ ¾Æ´Ï´Ù.) À̷лóÀ¸·Î ½ÇÇàÆÄÀÏ¿¡ ¸µÅ©µÇ´Â  Á¤Àû ELF 
¶óÀ̺귯¸® ÄÚµå´Â 1-5%Á¤µµ »¡¸® ¼öÇàµÇ¾îÁ®¾ßÇϳª ½ÇÁ¦¿¡  À־´Â ´Ù¸¥ ¿©·¯°¡Áö 
º¹ÇÕÀûÀÎ ÀÌÀ¯·Î ÀÎÇÏ¿© ÀÌ·± ¿¹´Â Àß ¸ÂÁö ¾Ê´Â°Í °°´Ù. 

 Á¤Àû ¶óÀ̺귯¸®¸¦ »ý¼ºÇϰųª  ±âÁ¸ÀÇ Á¤Àû ¶óÀ̺귯¸®¿¡  ºÎ°¡Àû ¿ÀºêÁ§Æ® 
ÆÄÀÏÀ» Ãß°¡ÇÒ °æ¿ì ´ÙÀ½ÀÇ ¸í·ÉÀ» »ç¿ëÇÑ´Ù. 

 ar rcs my_library.a file1.o file2.o 
 À§ÀÇ ¿¹ÀÇ ¸í·ÉÀº file1.o file2.o¶ó´Â ¿ÀºêÁ§Æ®  ÆÄÀÏÀ» mylibrary.a¿¡ Ãß°¡ÇÏ
°Å³ª Á¸ÀçÇÏÁö ¾ÊÀ»°æ¿ì ÀÌ ÆÄÀÏÀ» »ý¼ºÇÑ´Ù. Á¤Àû ¶óÀ̺귯¸® »ý¼º°ú  °ü·ÃÇÑ 
´õ  ÀÌ»óÀÇ Á¤º¸´Â ar(1)À» º¸±â ¹Ù¶õ´Ù. 

 Á¤Àû ¶óÀ̺귯¸®¸¦ ´ç½ÅÀÌ ¸¸µé¾ú´Ù¸é »ç¿ëÇϱ⸦ ¿øÇÒ °ÍÀÌ´Ù. À̸¦  »ç¿ëÇÏ
·Á¸é  ½ÇÇà ÇÁ·Î±×·¥À» »ý¼ºÇϱâ À§ÇÑ ÄÄÆÄÀϰú  ¸µÅ©°úÁ¤ÀÇ ÇÑ ºÎºÐ¿¡ ÀÌ ÆÄ
ÀÏÀ» Æ÷ÇÔ½ÃŰ¸é µÈ´Ù. ¸¸¾à¿¡ gcc(1)À» »ç¿ëÇÏ¿© ½ÇÇàÆÄÀÏÀ» ¸¸µç´Ù¸é -l  ¿É
¼ÇÀ» »ç¿ëÇÏ¿© ´ç½ÅÀÌ  ¸¸µç ¶óÀ̺귯¸®¸¦ ¸í½ÃÇÏ¸é  µÈ´Ù. (info:gccÀ» ÂüÁ¶ÇÏ
¸é ´õ ¸¹Àº Á¤º¸¸¦ ¾òÀ»¼ö ÀÖÀ½). ¸µÄ¿ÀÎ ld(1)¸¦ ¹Ù·Î »ç¿ëÇÏ¿©µµ(-l,¶É´À  -L
¿É¼Ç) µÇ³ª ld(1)ÀÇ ÀÎÅÍÆäÀ̽º°¡  ÀÚÁÖ º¯ÇϹǷΠgcc(1)À»   ¾²´Â °ÍÀÌ ´õ ³ª
À» °ÍÀÌ´Ù.
</p>
<sect> °øÀ¯ ¶óÀ̺귯¸®<p>
 °øÀ¯ ¶óÀ̺귯¸®¶õ ÇÁ·Î±×·¥ÀÌ ½ÃÀÛµÉ ¶§ ÀÌ ÇÁ·Î±×·¥¿¡ ÀÇÇØ¼­ ÀûÀçµÇ´Â 
¶óÀ̺귯¸®¸¦ ¸»ÇÑ´Ù. ¾î¶² °øÀ¯ ¶óÀ̺귯¸®°¡ ¹Ù¸£°Ô ÀûÀç¾ú´Ù¸é ÀÌÈÄ¿¡ ½ÇÇàµÇ
´Â  ¸ðµç ÇÁ·Î±×·¥µéÀº ÀÚµ¿ÀûÀ¸·Î ÀÌ »õ·Î¿î °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ °ÍÀÌ
´Ù. ½ÇÀç¿¡ À־, ¸®´ª½º¿¡¼­ »ç¿ëµÇ´Â Á¢±Ù¹æ½ÄÀº ¾Æ·¡¿Í °°Àº ±â´ÉµéÀ» Çã
¿ëÇϹǷΠ´õ¿í ź·ÂÀûÀÌ¸ç ¶ÇÇÑ, ¼¼·ÃµÇ°Ô ±â´ÉÇÑ´Ù. 

 * ¶óÀ̺귯¸®¸¦ °»½ÅÇϸ鼭 ÀÌ  ¶óÀ̺귯¸®ÀÇ ±¸¹öÀü Áö¿ø¿ë  ¹öÀüÀÌ ¾øÀ̵µ 
¿©ÀüÈ÷ ±¸ ¹öÀüÀÇ ¶óÀ̺귯¸®ÀÇ »ç¿ëÀ» ¿øÇÏ´Â ÇÁ·Î±×·¥À» Áö¿øÇÒ¼ö ÀÖ´Ù.

 * ƯÁ¤ ÇÁ·Î±×·¥ÀÇ ¼öÇà½Ã ¶óÀ̺귯¸® ¶Ç´Â ½ÉÁö¾î ¶óÀ̺귯¸®ÀÇ Æ¯Á¤ÇÔ¼öÀÇ 
¿À¹ö¶óÀ̵ù(´ëÄ¡)ÀÌ °¡´ÉÇÏ´Ù.

 * ÀÌ ¸ðµç ±â´ÉÀ» ±âÁ¸ÀÇ ¶óÀ̺귯¸®¸¦  ÀÌ¿ëÇÏ¿© ÇÁ·Î±×·¥ ½ÇÇàÁß¿¡ °¡´ÉÇÏ
´Ù.
<descrip>
<tag/°ü ·Ê/
 °øÀ¯ ¶óÀ̺귯¸®°¡ ÀÌ·¯ÇÑ ±â´ÉµéÀ» Áö¿øÇϱâ À§Çؼ­´Â  »ç¿ëÀÚ°¡ ¹Ýµå½Ã µû
¶ó¾ßÇÒ ÀÌ¿ë»óÀÇ ¸î°¡Áö °ü·Ê¿Í  °¡À̵å¶óÀÎÀÌ ÀÖ´Ù. ´ç½ÅÀº ÇÑ  ¶óÀ̺귯¸®¸¦ 
ÀÏÄ´ À̸§µéÀÇ Â÷ÀÌ Æ¯È÷  "soname"°ú  "real name"À» ±¸º°ÇÒ¼ö  ÀÖ¾î¾ßÇÏ
¸ç, (¶ÇÇÑ À̵éÀÌ ¾î¶»°Ô »óÈ£ÀÛ¿ë Çϴ°¡µµ ¾Ë¾Æ¾ß ÇÑ´Ù) ¶ÇÇÑ,  ¶óÀ̺귯¸®°¡ 
ÆÄÀÏ ½Ã½ºÅÛ»óÀÇ ¾îµð¿¡ À§Ä¡ÇØ¾ß Çϴ°¡µµ ¾Ë¾Æ¾ß ÇÑ´Ù.
<tag/°øÀ¯ ¶óÀ̺귯¸® À̸§µé/
 ¸ðµç °øÀ¯ ¶óÀ̺귯¸®´Â "soname"ÀÌ¶ó  ºÒ¸®´Â Ưº°ÇÑ À̸§À»  °¡Áö°í ÀÖ´Ù. 
"soname"Àº Á¢µÎ¾î "lib", ¶óÀ̺귯¸® À̸§,  ".so"¶ó´Â ¹®±¸, ±× ´ÙÀ½ ¸¶Ä§Ç¥¿Í 
ÀÎÅÍÆäÀ̽º º¯°æ½Ã Áõ°¡µÇ´Â ¹öÀü ³Ñ¹ö·Î  ±¸¼ºµÈ´Ù. ( ¿¹¿Ü·Î °¡Àå  Àú¼öÁØÀÇ 
C¶óÀ̺귯¸®µéÀº "lib"·Î ½ÃÀÛµÇÁö ¾Ê´Â´Ù) ¿ÏÀüÇÑ °ø½ÄÀû "soname"¿¡´Â 
¶óÀ̺귯¸®°¡ ¼ÓÇÑ µð·ºÅ丮¸íÀÌ ¾ÕºÎºÐ¿¡ µé¾î°£´Ù. ¿î¿ëÁßÀÎ ½Ã½ºÅÛ¿¡¼­´Â  ¿ÏÀü
ÇÑ °ø½ÄÀû "soname" À̶õ °øÀ¯¶óÀ̺귯¸®ÀÇ  ½ÇÁ¦ À̸§("real name")¿¡  ´ëÇÑ 
½Éº¼¸¯ ¸µÅ©(½ÇÁ¦ Äڵ带 ´ã°íÀÖ´Â ÆÄÀÏÀÌ ¾Æ´Ñ)°¡ µÉ °ÍÀÌ´Ù.

 ¸ðµç °øÀ¯ ¶óÀ̺귯¸®´Â ½ÇÁ¦ ¶óÀ̺귯¸® Äڵ尡 ÀúÀåµÇ¾î ÀÖ´Â ÆÄÀÏÀÇ ÆÄÀÏ
¸íÀÎ "real name"À» ¶ÇÇÑ °¡Áø´Ù. ½ÇÁ¦ ÆÄÀϸíÀº "soname"¿¡ ¸¶Ä§Ç¥¿Í ¸¶ÀÌ³Ê 
¹öÀü ³Ñ¹ö, ¸¶Ä§Ç¥ ±×¸®°í ¸±¸®Áî ³Ñ¹ö¸¦ ´õÇÑ  °ÍÀÌ´Ù. ¸±¸®Áî ³Ñ¹ö´Â ¼±Åûç
Ç×ÀÌ´Ù. ¸¶ÀÌ³Ê ³Ñ¹ö¿Í ¸±¸®Áî ³Ñ¹ö·Î Á¤È®È÷ ¾î¶² ¹öÀüÀÇ ¶óÀ̺귯¸®°¡  ¼³Ä¡
µÇ¾î ÀÖ´ÂÁö ¾Ë°Ô ÇÔÀ¸·Î½á ½Ã½ºÅÛ ±¸¼ºÀ» Á¶ÀýÇÒ¼ö ÀÖ´Ù. ÀÌ ¹øÈ£µéÀº 
¶óÀ̺귯¸®¸¦ ±â¼úÇϱâÀ§ÇÑ ¹®¼­È­½Ã¿¡ »ç¿ëµÈ ¹øÈ£¿Í ¸ÂÁö ¾ÊÀ»¼öµµ ÀÖÀ½¿¡ À¯ÀÇÇÏ
¶ó. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¶óÀ̺귯¸®ÀÇ ¹®¼­È­°¡ ´õ ¿ëÀÌÇØÁø´Ù.

 ºÎ°¡ÀûÀ¸·Î ÄÄÆÄÀÏ·¯°¡ ¶óÀ̺귯¸®¸¦ ¿ä±¸ÇÒ ¶§ »ç¿ëÇÏ´Â À̸§ÀÌ Çϳª ´õ Á¸
ÀçÇÑ´Ù.(³ª´Â À̸¦ "linker name"À̶ó ÀÏÄÃÀ» °ÍÀÌ´Ù.) ¿©±â¿¡´Â ¾î¶°ÇÑ ¹öÀü³Ñ
¹öµµ Æ÷ÇÔµÇÁö ¾Ê´Â "soname"ÀÌ ÇØ´çµÈ´Ù.
 °øÀ¯ ¶óÀ̺귯¸®¸¦ °ü¸®ÇÏ´Â ÇÙ½ÉÀº ÀÌ·¯ÇÑ À̸§µéÀ» Àß ºÐº°ÇÏ´Â °ÍÀÌ´Ù. ÇÁ
·Î±×·¥¿¡¼­ ÇÊ¿äÇÑ °øÀ¯ ¶óÀ̺귯¸®¸¦ ³»ºÎÀûÀ¸·Î  Ç¥ÇöÇÒ¶§´Â ±× ¶óÀ̺귯¸®
ÀÇ "soname"À» ½á¾ßÇÑ´Ù. ¹Ý´ë·Î ¸¸¾à¿¡ ´ç½ÅÀÌ  °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µé¾ú´Ù
¸é ÀÚ¼¼ÇÑ ¹öÀü Á¤º¸¸¦ Æ÷ÇÔÇÑ ½ÇÁ¦ ÆÄÀϸíÀ» ÁÖ¾î¾ß ÇÑ´Ù. ´ç½ÅÀÌ »õ·Î¿î  ¹ö
ÀüÀÇ ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÒ¶§´Â ¸î °³ÀÇ Á¤ÇØÁø µð·ºÅ丮µéÁßÀÇ ÇѰ÷¿¡ ¼³Ä¡ÇÑ
µÚ¿¡ ldconfig¶ó´Â ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¿©¾ß ÇÑ´Ù. ldconfig´Â µð·ºÅ丮¿¡ Á¸ÀçÇÏ
´Â ÆÄÀϵéÀ» Á¡°ËÇÑ µÚ  ½ÇÁ¦ ÆÄÀϸíÀÇ ½Éº¼¸¯  ¸µÅ©·Î½á sonameÀ» »ý¼ºÇϸç 
µ¿½Ã¿¡ ij½¬ ÆÄÀÏÀÎ /etc/ld.so.cache¸¦ ¼ÂÆÃÇÑ´Ù. 

 ldconfig´Â linker nameÀ» ¼ÂÆÃÇÏÁö ¾Ê´Â´Ù.  À̰ÍÀº º¸Åë ¶óÀ̺귯¸®ÀÇ ¼³Ä¡
½Ã¿¡ ¼ÂÆÃÀ» Çϴµ¥, °£´ÜÇÏ°Ô °¡Àå  ÃÖ±ÙÀÇ sonameÀ̳ª real name¿¡ ½Éº¼¸¯ 
¸µÅ©¸¦ ¸¸µé¸é µÈ´Ù. ´ëºÎºÐÀÇ °æ¿ì ¶óÀ̺귯¸®¸¦ °»½ÅÇϰí ÀÚµ¿ÀûÀ¸·Î ¸µÅ©½Ã
¿¡ »ç¿ëÇϱ⸦ ¿øÇÒ°ÍÀ̹ǷΠsoname¿¡ ½Éº¼¸¯ ¸µÅ©Çϱ⸦ ±ÇÀåÇÑ´Ù. H. J. Lu
¿¡°Ô ldconfig°¡ ¿Ö ÀÚµ¿À¸·Î linker nameÀ» ¼ÂÆÃÇÏÁö ¾Ê´À³Ä°í   ¹°¾ú´õ´Ï ±×
ÀÇ ¼³¸íÀº °¡Àå ÃÖ±ÙÀÇ  ¶óÀ̺귯¸®·Î ¸µÅ©½ÃŰ°í ½ÍÀ»¶§°¡  ÀÖÀ»°ÍÀÌ¸ç ¶ÇÇÑ 
ÀÌÀü ¹öÀüÀÇ ¶óÀ̺귯¸®¸¦ °³¹ßÇϰųªÇÒ ¶§ ±×°ÍÀ»  ¸µÅ©ÇÏ·Á ÇÒ ¶§°¡ ÀÖÀ¸¹Ç
·Î ldconfig´Â ¿©·¯ºÐÀÌ ¾î¶²  ¶óÀ̺귯¸®¿Í  ¸µÅ©ÇÏ°í ½ÍÀºÁö °¡Á¤ÇÏÁö  ¾Ê´Â 
°ÍÀÌ¸ç ±×·¡¼­ ¼³Ä¡ÀÚ´Â ¾î¶² ¶óÀ̺귯¸®°¡  ¸µÅ©µÉ°ÍÀÎÁö¸¦ ¸í½ÃÇØ¾ß Çϴ°Í
À̶ó Çß´Ù. 

 ÀÌ»óÀÇ ¾ê±â¸¦ Á¾ÇÕÇÑ ¿¹¸¦ µé¾îº¸¸é ldconfig°¡  /usr/lib/libreadline.so.3.0°ú 
°°Àº real nameÀÇ ½Éº¼¸¯ ¸µÅ©·Î  ¼ÂÆÃÇÑ  /usr/lib/libreadline.so.3  ÇüÅÂÀÇ ¿Ï
ÀüÇÑ °ø½ÄÀû sonameÀÌ ÀÖÀ»°ÍÀÌ¸ç  /usr/lib/libreadline.so.3¿¡  ½Éº¼¸¯ ¸µÅ©µÈ 
link nameÀ¸·Î½á  /usr/lib/libreadline.so°¡ ¶ÇÇÑ ÀÖÀ» °ÍÀÌ´Ù.
<tag/ÆÄÀÏ ½Ã½ºÅÛ»óÀÇ À§Ä¡/
 °øÀ¯ ¶óÀ̺귯¸®´Â ÆÄÀÏ ½Ã½ºÅÛ »óÀÇ Æ¯Á¤À§Ä¡¿¡ Á¸ÀçÇØ¾ßÇÑ´Ù. ¿ÀÇ ¼Ò½º ¼Ò
ÇÁÆ®¿þ¾îµéÀº GNUÀÇ Ç¥ÁØÀ» µû¸£´Â °æÇâÀÌ ÀÖÀ¸¸ç  ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº info¹®
¼­ÀÇ [13]info:standards#Directory_Variables ºÎºÐÀ» »ìÆìº¸±æ ¹Ù¶õ´Ù. GNU Ç¥
ÁØÀº  ¼Ò½ºÄÚµåÀÇ ¹èÆ÷½Ã¿¡  ¸ðµç ¶óÀ̺귯¸®¸¦ /usr/local/lib¿¡  ¼³Ä¡ÇÏ±æ ±Ç
ÀåÇÑ´Ù(/usr/local/bin¿¡´Â ¸í·ÉµéÀÌ ¸ðÀÓ). GNUÇ¥ÁØÀº  ¶ÇÇÑ ÀÌ·¯ÇÑ µðÆúÆ®µé
À» ¹«½ÃÇϰųª ¼³Ä¡·çƾÀ» È£ÃâÇÏ´Â ÀýÂ÷ µî¿¡ °üÇÑ °ü·ÊµéÀ» Á¤ÀÇÇϰí ÀÖ´Ù.
 ÆÄÀϽýºÅÛ °èÃþÀû ±¸Á¶Ç¥ÁØ(FHS:File system Hierarchy Standard)  ¶ÇÇÑ ¼Ò
½º¹èÆ÷½Ã¿¡ ¾î¶² À§Ä¡¿¡ ¹«¾ùÀ» µÎ¾î¾ß ÇÏ´ÂÁö¿¡  ´ëÇØ  ³íÇϰí ÀÖ´Ù.( <url url="http://www.pathname.com/fhs" name="www.pathname.com/fhs">
¸¦ ÂüÁ¶Ç챉  ¹Ù¶÷).  FHS¿¡¼­´Â  ´ëºÎºÐÀÇ  ¶óÀ̺귯¸®¸¦ 
/usr/lib¿¡ ¼³Ä¡ÇÒ °ÍÀ»  ±ÇÀåÇÑ´Ù, ±×·¯³ª ½Ã½ºÅÛ ½ÃÀ۽à ÇÊ¿äÇÑ ¶óÀ̺귯¸®´Â 
/lib¿¡ ¶ÇÇÑ, ºñ½Ã½ºÅÛ ¶óÀ̺귯¸®´Â /usr/local/lib¿¡ ¼³Ä¡µÇ¾î¾ß ÇÑ´Ù. 
 
 À§ÀÇ µÎ Ç¥ÁØÀÌ ¼­·Î ¸ð¼øµÇ´Â  µí º¸ÀÌÁö¸¸ ½ÇÁ¦·Î ±×·¸Áö´Â  ¾Ê´Ù. GNUÀÇ 
Ç¥ÁØÀº ¼Ò½ºÄÚµåÀÇ °³¹ßÀÚ¸¦ À§ÇÑ µðÆúÆ®°ªÀ»  Á¦¾ÈÇÏ´Â °ÍÀ̰í, FHS´Â ¼Ò½º
ÀÇ ¹èÆ÷ÀÚ(½Ã½ºÅÛÀÇ µðÆúÆ® ¼Ò½ºÄڵ带 ¼±ÅÃÀûÀ¸·Î  ±× ½Ã½ºÅÛÀÇ ÆÐŰÁö °ü¸®
µµ±¸¸¦  ÅëÇØ¼­ ´ëÄ¡½ÃŰ´Â)¸¦ À§ÇÑ µðÆúÆ®°ªÀ» Á¦¾ÈÇÏ´Â °ÍÀÌ´Ù. ½ÇÁ¦·Î À̰Í
Àº »ó´çÈ÷ È¿°úÀûÀÎ °ÍÀÌ´Ù, Áï, ´ç½ÅÀÌ ´Ù¿î·ÎµåÇÑ  °¡Àå ÃÖ½ÅÀÇ(¹ö±×ÀÇ °¡´É
¼ºÀÌ ÀÖ´Â) ¼Ò½ºÄÚµå´Â ÀÚµ¿ÀûÀ¸·Î ·ÎÄà µð·ºÅ丮ÀÎ /usr/local¿¡ ¼³Ä¡µÉ°ÍÀ̸ç 
±×  Äڵ尡 ÀÌÁ¦  ¿Ïº®ÇØÁö¸é ÆÐŰÁö ¸Å´ÏÀú¸¦ ÀÌ¿ëÇÏ¿© ½Ã½ºÅÛ¿¡  ¼³Ä¡µÈ µð
ÆúÆ®(¶óÀ̺귯¸®)¸¦ ´ëÄ¡ÇÏ°í ¹èÆ÷½ÃÀÇ Ç¥ÁØ  µð·ºÅ丮·Î ¼³Ä¡ÇÒ¼ö ÀÖ´Â  °ÍÀÌ
´Ù. ¶óÀ̺귯¸®¸¦ ÅëÇØ¼­¸¸  È£Ãâ°¡´ÉÇÑ ÇÁ·Î±×·¥µéÀ» ¶óÀ̺귯¸®°¡  È£ÃâÇÏ´Â 
°æ¿ì¿¡´Â ¹Ýµå½Ã ±× ÇÁ·Î±×·¥µéÀ» usr/local/libexec(¹èÆ÷º»¿¡¼­´Â /usr/libexec
ÀÓ)¿¡ µÎ¾î¾ßÇÔÀ» ¸í½ÉÇ϶ó. ÇѰ¡Áö È¥µ¿Àº ·¹µåÇÞÀÇ ¹èÆ÷º»µéÀº ¶óÀ̺귯¸®¸¦ 
ã´Â °úÁ¤¿¡¼­  /usr/local µð·ºÅ丮¸¦ Á¦¿Ü ½ÃŲ´Ù´Â °ÍÀε¥,  ¾Æ·¡¿¡¼­  ³íÀÇ
µÉ /etc/so.confºÎºÐÀ» Âü°íÇ챾  ¹Ù¶õ´Ù. ±×¿Ü¿¡ ¶Ç´Ù¸¥ ÇϳªÀÇ  Ç¥ÁØ  
¶óÀ̺귯¸®  µð·ºÅ丮°¡ Àִµ¥  X-À©µµ¿ì  ½Ã½ºÅÛÀÌ »ç¿ëÇÏ´Â /usr/X11R6/libÀÌ ±×
°ÍÀÌ´Ù.  /lib/security µð·ºÅ丮´Â PAM¸ðµâ¿¡¼­ »ç¿ëµÊ¿¡  À¯ÀÇÇ϶ó. ÀÌ µð·º
Å丮´Â Åë»ó µ¿Àû ¶óÀ̺귯¸®·Î½á ÀûÀçµÈ´Ù.(¿ª½Ã µÞºÎºÐ¿¡¼­ ³íÀǵɰÍÀÓ) 

<tag/¶óÀ̺귯¸®´Â ¾î¶»°Ô »ç¿ëµÇ´Â°¡/
 ¸ðµç ¸®´ª½º ½Ã½ºÅÛÀÌ Æ÷ÇԵǴ GNUÀÇ glibc-±â¹ÝÀÇ ½Ã½ºÅÛÀº ELF ÀÌÁø ½Ç
Çà ÇÁ·Î±×·¥ÀÇ ½ÃÀ۽ÿ¡ ÀÚµ¿ÀûÀ¸·Î  ÇÁ·Î±×·¥  ·Î´õ¸¦ ÀûÀçÇÏ°í ½ÇÇà½ÃŲ´Ù. 
¸®´ª½º ½Ã½ºÅÛ¿¡¼­ ÀÌ ·Î´õ´Â /lib/ld-linux.so.X(X´Â ¹öÀü ³Ñ¹öÀÓ)À̶ó ºÒ¸®¿ö
Áö¸ç ÇÁ·Î±×·¥¿¡¼­ »ç¿ëµÇ´Â ¸ðµç °øÀ¯ ¶óÀ̺귯¸®¸¦ Â÷·Ê´ë·Î ã¾Æ¼­ ÀûÀç½Ã
Ų´Ù. 

 Ž»öµÇ¾îÁú µð·ºÅ丮ÀÇ ¸ñÂ÷´Â /etc/ld.so.conf¿¡ µé¾î ÀÖ´Ù.  ·¹µåÇÞ¿¡ ±â¹ÝÇÑ 
¹èÆ÷º»¿¡´Â ÀϹÝÀûÀ¸·Î /usr/local/lib°¡ /etc/ld.so.confÆÄÀÏ¿¡  µé¾î ÀÖÁö¾ÊÀºµ¥ 
ÀúÀÚ°¡ »ý°¢Çϱâ·Î  À̰ÍÀº ÀÏÁ¾ÀÇ  ¹ö±×°¡ ¾Æ´Ñ°¡  »ý°¢ÇÑ´Ù. ·¹µåÇÞÀÇ  °æ¿ì 
/usr/local/libÀ»  /etc/ld.so.conf¿¡ ÷°¡ÇÏ´Â °ÍÀº ¸¹Àº ÇÁ·Î±×·¥µéÀ»  ¼öÇà½ÃŰ
±âÀ§ÇØ ÈçÈ÷ ÀÖ´Â ¼öÁ¤ÀÛ¾÷ÀÌ´Ù. 

 ¸¸¾à ¶óÀ̺귯¸®³»ÀÇ Æ¯Á¤ÇÑ ÇÔ¼ö¸¸À» ´ëÄ¡½ÃŰ°í ³ª¸ÓÁö´Â ±×´ë·Î À¯ÁöÇÏ·Á 
ÇÒ¶§´Â ´ëÄ¡½Ãų ¶óÀ̺귯¸®(.oÆÄÀϵé)µéÀ» /etc/ld.so.preload ÆÄÀÏ¿¡  ¸í½ÃÇϸé 
µÇ´Âµ¥ ÀÌ·¯ÇÑ ÇÁ¸®·Îµå ¶óÀ̺귯¸®µéÀº Ç¥ÁØÀûÀÎ  ÇÔ¼öº¸´Ù ¿ì¼±±ÇÀ» °¡Áö°Ô 
µÈ´Ù. ÀÌ·¯ÇÑ ÇÁ¸®·Îµù ÆÄÀϵéÀº º¸Åë   ÀÀ±Þ ÆÐÄ¡º»¿¡¼­ »ç¿ëµÇ´Âµ¥  Á¤»óÀû 
¹èÆ÷º»¿¡´Â Àß Æ÷ÇÔµÇÁö ¾Ê´Â´Ù. 

 ¸Å ÇÁ·Î±×·¥ÀÇ ½ÃÀ۽ø¶´Ù ÀÌ ¸ðµç µð·ºÅ丮µéÀ»  Ž»öÇÏ´Â °ÍÀº Àü¹ÝÀûÀ¸·Î  
¸Å¿ì  ºñÈ¿À²ÀûÀ̱⠶§¹®¿¡   ½ÇÁ¦ÀûÀ¸·Î´Â ij½¬°¡  »ç¿ëµÈ´Ù.  ldconfig ÇÁ·Î
±×·¥Àº Åë»ó /etc/ld.so.conf¸¦ Àо ¸ðµç  ÇÊ¿äÇÑ µ¿Àû ¸µÅ© µð·ºÅ丮µé·ÎºÎ
ÅÍ Àû´çÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ »ý¼ºÇÑ´Ù.(±×·¡¼­  À̸§  »ç¿ëÀÇ  ±ÔÄ¢À» Àß µû¶ó¾ß 
ÇÑ´Ù) ±×  ´ÙÀ½À¸·Î /etc/ld.so.cache ¿¡  ÀÌ  ³»¿ëµéÀ» ±â·ÏÇϸç ÀÌ ´ÙÀ½ ºÎÅÍ
´Â ÇÁ·Î±×·¥µéÀÌ ÀÌ ÆÄÀÏÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÇØ¼­  ¶óÀ̺귯¸®ÀÇ ¾×¼¼
½º  ¼Óµµ´Â »ó´çÈ÷  Çâ»óµÇ´Â °ÍÀÌ´Ù.  À§ÀÇ ³»¿ëÀÌ   ÇÔÃàÇÏ´Â  ¹Ù´Â DLLÀÌ 
Ãß°¡  ¶Ç´Â  Á¦°ÅµÉ  ¶§,   ¶Ç´Â  DLLÀÇ µð·ºÅ丮°¡    º¯°æµÉ¶§´Â ¹Ýµå½Ã 
ldconfig°¡ ½ÇÇàµÇ¾î¾ß  ÇÑ´Ù´Â °ÍÀ̸ç, ±×·¡¼­ ÆÐŰÁö ¸Å´ÏÀú°¡ ¶óÀ̺귯¸®¸¦ 
¼³Ä¡ÇÒ ¶§, ÀÌ °úÁ¤Àº Åë»óÀ¸·Î ¼öÇàµÇ´Â ÀýÂ÷ÀÎ  °ÍÀÌ´Ù. ±×·¡¼­ ÇÁ·Î±×·¥ ½Ã
À۽à µ¿Àû ·Î´õ´Â ½ÇÁ¦·Î´Â /etc/ld.so.cache¸¦  »ç¿ëÇÏ¿© ÇÊ¿äÇÑ ¶óÀ̺귯¸®¸¦ 
ÀûÀçÇÏ´Â °ÍÀÌ´Ù.

<tag/ȯ°æ º¯¼ö/
 ¿©·¯ Á¾·ùÀÇ È¯°æº¯¼öµéÀÌ À§ÀÇ ÀÌ·¯ÇÑ ÇÁ·Î±×·¥  ½ÃÀÛ½ÃÀÇ ÀûÀç°úÁ¤µéÀ» Á¶
ÀýÇÒ¼ö ÀÖÀ¸¸ç ¶ÇÇÑ ÀÌ °úÁ¤µéÀ» ´ëÄ¡Çϵµ·Ï Çϴ ȯ°æº¯¼öµéµµ ÀÖ´Ù. ¿¹¸¦ µé
¸é ÀÌ ¼öÇà°úÁ¤Áß, ¾î¶² ¶óÀ̺귯¸®¸¦  ÀáÁ¤ÀûÀ¸·Î ±³Ã¼ÇÏ¿© ¼öÇàÇÒ¼öµµ ÀÖ´Ù. 
¸®´ª½º¿¡¼­  ȯ°æº¯¼ö LD_LIBRARY_PATH´Â ÄÝ·ÐÀ¸·Î ºÐ¸®µÇ¾î  Àִ ǥÁØ
ÀûÀÎ ¶óÀ̺귯¸®¼Â¿¡ ¾Õ¼­¼­ °¡Àå ¸ÕÀú Ž»öµÇ¾îÁú  ¶óÀ̺귯¸® µð·ºÅ丮ÁýÇÕ
ÀÌ´Ù. ÀÌ·¸°Ô ÇÏ¸é  »õ·Î¿î ¶óÀ̺귯¸®¸¦ µð¹ö±ëÇϰųª ºñÇ¥ÁØÀûÀÎ ¶óÀ̺귯¸®
¸¦ ¾î¶²  Ư¼öÇÑ ¿ëµµ·Î »ç¿ëÇÒ ¶§¿¡ À¯¿ëÇÒ°ÍÀÌ´Ù.  ȯ°æº¯¼ö LD_PRELOAD
´Â /etc/ld.so. preloadó·³  Ç¥ÁØÀûÀÎ ÇÔ¼öµé¿¡ ¿À¹ö¶óÀ̵åµÉ ÇÔ¼öµéÀÌ ÀÖ´Â ¿À
ºêÁ§Æ® ÆÄÀÏÀÇ ¸®½ºÆ®¸¦ ³ªÅ¸³½´Ù. À§ÀÇ ÀÌ·¯ÇÑ ±â´ÉµéÀº ·Î´õ /lib/ld-linux.so 
°¡ ±¸ÇöÇÑ´Ù.  

 ÀûÀç°úÁ¤À» Á¦¾îÇÏ´Â ´Ù¸¥  Á¾·ùÀÇ È¯°æº¯¼öµéÀÌ  ÀÖ´Ù; À̸§ÀÌ   LD_ ¶Ç´Â 
RTLD_·Î ½ÃÀÛÇÑ´Ù. ÀÌ·¯ÇÑ º¯¼öµéÀÇ ´ëºÎºÐÀº ÀûÀç°úÁ¤ÀÇ Àú¼öÁØ µð¹ö±ëÀ̳ª 
Ư¼ö±â´ÉÀÇ ±¸ÇöÀ» À§Çؼ­ »ç¿ëµÇ¾î Áø´Ù. ÀÌµé ´ëºÎºÐÀÌ Àß ¹®¼­È­µÇÁö  ¾Ê¾Ò
±â ¶§¹®¿¡ ÀÚ¼¼È÷ ¾Ë·Á¸é ¼Ò½ºÄڵ带 Àо°¡´Â °ÍÀÌ ÃÖ¼±ÀÇ ¹æµµÀÏ °ÍÀÌ´Ù.
 ÀÌ·¸°Ô µ¿Àû¸µÅ© ¶óÀ̺귯¸®¿¡ ´ëÇÑ Á¦¾î±ÇÀ» »ç¿ëÀÚ¿¡°Ô  Çã¶ôÇÏ´Â °ÍÀº Ư
º°ÇÑ Á¶Ä¡°¡ ÃëÇØÁöÁö ¾Ê´Â´Ù¸é setuid/setgid µîÀÇ ÇÁ·Î±×·¥¿¡ À־´Â ´ë´Ü
È÷ À§ÇèÇÑ °ÍÀÌ´Ù.  ±×·¡¼­ GNU·Î´õÀÇ °æ¿ì  ¸¸¾à¿¡ ÇÁ·Î±×·¥ÀÌ setuid  ¶Ç´Â 
setgidÀÏ °æ¿ì¿¡´Â ÀÌ·¯ÇÑ È¯°æº¯¼öµé(¶Ç´Â ÀÌ¿Í À¯»çÇÑ  ´Ù¸¥ º¯¼öµé)Àº ¹«½Ã
µÇ°Å³ª ¾Æ´Ï¸é ÇÒ¼öÀÖ´Â ±â´ÉÀÌ ´ë´ÜÈ÷ Á¦ÇѵȴÙ.  ·Î´õ´Â  ÇÁ·Î±×·¥ÀÌ setuid 
¶Ç´Â setgidÀÎÁö    Á¡°ËÇϱâÀ§ÇØ ÇÁ·Î±×·¥ÀÇ  credential¸¦  üũÇÑ´Ù;  uid¿Í 
euid(effective user ID)°¡ ´Ù¸£°Å³ª  gid¿Í egid(effective group  ID)°¡ ´Ù¸¥°æ
¿ì¿¡ ·Î´õ´Â ÀÌ ÇÁ·Î±×·¥À» setuid/setgid(¶Ç´Â »ó¼Ó¹ÞÀº°Í)ÀÌ¶ó  °¡Á¤Ç졒  ¸µ
Å©°úÁ¤ÀÇ Á¦¾î±â´ÉÀ» ´ë´ÜÈ÷ Á¦ÇÑÇÏ°Ô µÈ´Ù. GNUÀÇ glibc¶óÀ̺귯¸®ÀÇ ¼Ò½ºÄÚ
µå¸¦ Àо¸é ÀÌ·¯ÇÑ ³»¿ëÀ»  Àß º¼¼ö ÀÖÀ»°ÍÀÌ¸ç Æ¯È÷   elf/rtld.c, sysdeps/ 
generic/dl-sysdep.c¸¦ º¸±æ  ¹Ù¶õ´Ù. À̰ÍÀÌ ¶æÇÏ´Â  ¹Ù´Â ¸¸¾à¿¡ ´ç½ÅÀÌ uid,
gid¸¦ euid, egid¿Í °°°ÔÇϰí ÇÁ·Î±×·¥À»  È£ÃâÇϸé ÀÌ·¯ÇÑ È¯°æº¯¼öµéÀº ¿ÏÀü
ÇÑ ¿µÇâ·ÂÀ» ¹ÌÄ¥¼ö ÀÖ´Ù´Â ¶æÀÌ´Ù. ´Ù¸¥ À¯´Ð½º À¯»ç ½Ã½ºÅ۵鿡¼­´Â  ÀÌ·¯ÇÑ 
»óȲÀ» ´Ù¸£°Ô  ´Ù·ç±âµµ ÇÏÁö¸¸ °°Àº ÀÌÀ¯·Î ÀÎÇØ¼­ setuid/setgid  ÇÁ·Î±×·¥
Àº ȯ°æº¯¼ö¿¡ ÀÇÇØ¼­ À߸øµÈ ¿µÇâÀ» ¹Þ¾Æ¼­´Â ¾ÊµÇ´Â °ÍÀÌ´Ù.

<tag/°øÀ¯ ¶óÀ̺귯¸®ÀÇ »ý¼º/
 °øÀ¯ ¶óÀ̺귯¸®ÀÇ   »ý¼ºÀº ½±´Ù.  ¸ÕÀú gccÀÇ   fPICÇ÷¡±×("position inde- 
pendent code" °øÀ¯¶óÀ̺귯¸®·Î »ç¿ëÇÒ ¶§  Çʼö)¸¦ »ç¿ëÇÏ¿© ¿ÀºêÁ§Æ® ÆÄÀÏ
À» »ý¼ºÇÑ´Ù. ±× ´ÙÀ½¿£ ´ÙÀ½°ú °°Àº ¸í·ÉÇüÅ·Π°øÀ¯ ¶óÀ̺귯¸®¸¦ »ý¼ºÇÑ´Ù.
<verb>
gcc -shared  -WI, -soname,   your_soname\
 -o   library_name file_list library_list
</verb>
 µÎ °³ÀÇ ¿ÀºêÁ§ÇÁ ÆÄÀÏ(a.o, b.o)À» Æ÷ÇÔÇÏ´Â ÇϳªÀÇ  °øÀ¯ ¶óÀ̺귯¸®¸¦ »ý¼º
ÇÏ´Â ¿¹¸¦ µé¸é ¾Æ·¡¿Í °°´Ù. ÄÄÆÄÀϽÿ¡ °øÀ¯ ¶óÀ̺귯¸®¿¡ ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï
Áö¸¸ ±Ç°íµÇ´Â »çÇ×ÀÎ µð¹ö±ë Á¤º¸(-g¿É¼Ç)¿Í °æ°í(- wall¿É¼Ç)ÀÇ »ý¼º¿¡ À¯ÀÇ
Ç϶ó, ±×¸®°í -c¿É¼ÇÀ¸·Î ¿ÀºêÁ§Æ® ÆÄÀÏÀÌ  »ý¼ºµÇ¸ç ºÐ¸íÈ÷ -fPIC ¿É¼ÇÀÌ »ç
¿ëµÇ°í ÀÖ´Ù.
<verb>
gcc -fPIC -g -c -Wall a.c
gcc -fPIC -g -c -Wall b.c
gcc -shared -Wl, -soname, libmystuff.so.1 \ 
 -o libmystuff.so.1.0.1 a.o b.o -lc
</verb>
 À̶§ ÁÖÀÇ»çÇ× ¸î°¡Áö¸¦ Àû¾îº¸¸ç ¾Æ·¡¿Í °°´Ù.

* ÄÄÆÄÀÏ °á°ú  »ý¼ºµÉ ¶óÀ̺귯¸®¸¦  ¸í±âÇÏ´Â °ÍÀ»  ÀØÁö ¸»°ÍÀÌ¸ç  -fomit, 
-frame, -pointer µîÀÇ  ÄÄÆÄÀÏ·¯  ¿É¼ÇÀº ÁøÂ¥ ÇÊ¿äÇÒ °æ¿ì¿Ü¿£  ¾²Áö ¸» °Í. 
°á°úÀûÀ¸·Î »ý¼ºµÈ ¶óÀ̺귯¸®´Â µ¿ÀÛÇÏÁö¸¸ ÀÌ·¸°Ô  ÇÏ¸é µð¹ö°Å´Â ¹«¿ëÁö¹°
ÀÌ µÈ´Ù.

* -fpic°¡ ¾Æ´Ñ -fPIC¸¦ »ç¿ëÇÏ¿© ÄÚµå·Ñ »ý¼º½ÃÄÑ¾ß ÇÑ´Ù.(-fpic¸¦ ¾µ °æ¿ì ºÐ
±âÁ¡¿¡¼­ Å« À§Ä¡º¯È­°¡ ÇÊ¿äÇÒ°æ¿ì ¿ÏÀüÇÑ À§Ä¡ µ¶¸³Çü Äڵ带 ¾òÀ»¼ö ¾ø´Ù.)

<tag/°øÀ¯ ¶óÀ̺귯¸®ÀÇ ¼³Ä¡ ¹× »ç¿ë/
 ÀÌÁ¦ ¸¸¾à¿¡ ´ç½ÅÀÌ ÇϳªÀÇ °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µé¾ú´Ù¸é ±× ´ÙÀ½À¸·Î ¼³Ä¡
¸¦ ¿øÇÒ °ÍÀÌ´Ù. °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ¸¸µé¾îÁø °øÀ¯ ¶óÀ̺귯¸®¸¦ Ç¥ÁØ µð·ºÅä
¸®µéÁßÀÇ Çϳª(¿¹¸¦ µé¸é /usr/lib)¿¡ º¹»çÇ졒  ldconfig(8)¸¦ ½ÇÇà½ÃŰ´Â °ÍÀÌ
´Ù. 
 
 ¸¸¾à¿¡ (/usr/lib µð·ºÅ丮ÀÇ º¯°æ±ÇÀ» °¡ÁöÁö ¸øÇϰųª ÇØ¼­) À§Ã³·³ ÇÒ¼ö ¾ø
´Â °æ¿ì°¡ ÀÖ´Ù¸é ȯ°æº¯¼ö¸¦ »ç¿ëÇÏ¿© Á¶Á¤ÇÒ¼ö ÀÖ´Ù. ¸ÕÀú ¾îµò°¡¿¡ °øÀ¯ 
¶óÀ̺귯¸®¸¦ »ý¼ºÇؾßÇÑ´Ù. ±× ´ÙÀ½¿¡  ÇÊ¿äÇÑ °ÍÀº real  name¿¡ °üÇÑ ½Éº¼¸¯ 
¸µÅ©·Î½á  sonameÀ» »ý¼º(¶Ç´Â ¹öÀü¸íÀ» ÀüÇô  ¸í½ÃÇÏÁö ¾Ê´Â »ç¿ëÀÚÀ» À§ÇÑ 
¹öÀü¸íÀÌ Æ÷ÇÔµÇÁö ¾ÊÀº sonameÀ» ½Éº¼¸¯ ¸µÅ©·Î »ý¼º)ÇÏ´Â °ÍÀε¥  À̸¦ À§
ÇÑ °¡Àå °£´ÜÇÑ  ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ ldconfig¸¦ ½ÇÇàÇÏ´Â °ÍÀÌ´Ù. 

<bf>ldconfig -n directory_with_shared_library</bf>

 ±× ´ÙÀ½À¸·Î Ç¥ÁØ ¶óÀ̺귯¸® º¸´Ù ¾Õ¼­¼­ Ž»öµÉ ¶óÀ̺귯¸® µð·ºÅ丮 ¸ñ·Ï
ÀÎ LD_LIBRARY_PATH º¯¼ö¸¦ ¼³Á¤ÇÑ´Ù. ¸¸¾à¿¡  bash¶ó¸é ´ÙÀ½°ú °°ÀÌ ÇÏ
¿© my_programÀ» Æ÷ÇÔµÇ°Ô ÇÒ¼ö ÀÖ´Ù.

LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH my_program

 ¸¸¾à ƯÁ¤ÇÑ ÇÔ¼ö¸¸À» ¿À¹ö¶óÀ̵å ÇÏ·Á¸é ¿À¹ö¶óÀ̵ù  ¿ÀºêÁ§Æ® ÆÄÀÏÀ» »ý¼º
ÇÑ µÚ¿¡ LD_PRELOAD¸¦ ¼³Á¤Çؼ­ ÇÒ¼ö ÀÖ´Ù.  Áï, ÀÌ ÆÄÀÏ¿¡ ÀÖ´Â ÇÔ¼öµéÀÌ 
±âÁ¸ ÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵åÇÑ´Ù.

 ÀϹÝÀûÀ¸·Î ¶óÀ̺귯¸®¸¦  °»½ÅÇϴµ¥ ÀÖ¾î  Æ¯º°ÇÑ °í·Á»çÇ×Àº   ¾ø´Ù. ¸¸¾à 
API°¡  º¯È­ÇÑ´Ù¸é ¶óÀ̺귯¸®ÀÇ Á¦ÀÛÀÚ´Â  sonameÀ»  º¯°æÇÒ °ÍÀÌ´Ù.  °°Àº 
sonameÀ» °¡Áö¸é¼­ ³»¿ëÀº °»½ÅµÈ ½Å¹öÀüÀÇ ¶óÀ̺귯¸®¸¦ ¹«½ÃÇÏ°í ±¸¹öÀüÀÇ 
¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ·Á¸é, ±¸¹öÀüÀÇ  ¶óÀ̺귯¸®¸¦ ¾îµò°¡¿¡ º¹»çÇ졒  ±×°ÍÀÇ  
À̸§À» º¯°æ(À̸¦Å×¸é ¿¾³¯À̸§.origµî)ÇÑ µÚ ÀÌ À̸§ º¯°æµÈ ¶óÀ̺귯¸®¸¦ ½Ç
Á¦·Î È£ÃâÇÏ¿© »ç¿ëÇϵµ·Ï Àç¼³Á¤ÇÏ´Â ÀÛÀº wrap½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÏ¿© °­Á¦Àû
À¸·Î ±¸¹öÀüÀ» »ç¿ëÇÏ°Ô ÇÒ¼öÀÖ´Ù. °ü·Ê»ó ¿©·¯¹öÀüÀÇ ¶óÀ̺귯¸®µéÀÌ °°Àº µð
·ºÅ丮¿¡ ÀÖÀ»¼ö ÀÖÁö¸¸ ÀÌ  ±¸¹öÀüÀÇ ¶óÀ̺귯¸®¸¦ µû·Î  ƯÁ¤ÇÑ µð·ºÅ丮¿¡ 
À§Ä¡½Ãų¼öµµ ÀÖ´Ù. wrap ½ºÅ©¤©Æ®´Â  ¾Æ¸¶ ¾Æ·¡¿Í °°À» °ÍÀÌ´Ù.
<verb>
#!/bin/sh
  export LD_LIBRARY_PATH=/usr/local/my_lib:$LD_LIBRARY_PATH
  exec /usr/bin/my_program.orig $*
</verb>
 ÇÑ ÇÁ·Î±×·¥ÀÌ »ç¿ëÇÏ´Â °øÀ¯ ¶óÀ̺귯¸®ÀÇ  ¸ñ·ÏÀº ldd(1)¸¦ ½á¼­ ¾Ë  ¼ö ÀÖ
´Ù. ±×·¡¼­, ¿¹¸¦ µé¸é ls¸í·ÉÀÌ »ç¿ëÇÏ´Â °øÀ¯ ¶óÀ̺귯¸®ÀÇ ¸ñ·ÏÀº ´ÙÀ½ÀÇ ¿¹
¿Í °°ÀÌ ¾Ë¼öÀÖ´Ù

ldd /bin/ls

 º¸Åë ÇÁ·Î±×·¥¿¡¼­ ÀÇÁ¸Çϰí ÀÖ´Â ¶óÀ̺귯¸®ÀÇ sonameÀÇ ¸ñ·Ï°ú Æ÷ÇÔµÈ µð
·ºÅ丮°¡ º¸ÀϰÍÀÌ´Ù. ½ÇÁúÀûÀ¸·Î ´ÙÀ½ÀÇ µÎ ¸ðµâÀÇÁ¸¼ºÀº Ç×»ó º¸ÀϰÍÀε¥ ±×
°ÍÀº ¾Æ·¡¿Í °°´Ù.

* /lib/ld-linux.so.N(NÀº 1ÀÌ»ó Àû¾îµµ 2). ÀÌ ¶óÀ̺귯¸®´Â  ´Ù¸¥ ¸ðµç 
¶óÀ̺귯¸®¸¦ ÀûÀçÇÑ´Ù.

* libc.so.N(NÀº 6¶Ç´Â ±×ÀÌ»ó).  À̰ÍÀº C ¶óÀ̺귯¸®ÀÌ´Ù.  ´Ù¸¥  ÇÁ·Î±×·¡¹Ö 
¾ð¾îµé¿¡¼­µµ(Àû¾îµµ ±× ¾ð¾îÀÇ ¶óÀ̺귯¸®¸¦  ±¸ÇöÇϱâÀ§Çؼ­) C ¶óÀ̺귯¸®
¸¦  ¾²´Â °æÇâÀÌ ÀÖ´Ù. ±×·¡¼­ ¸ðµç ÇÁ·Î±×·¥¿¡¼­ Àû¾îµµ ÀÌ ¶óÀ̺귯¸®´Â Æ÷
Ç﵃ °ÍÀÌ´Ù.

°æ°í: ldd¸¦ ½Å·ÚÇÒ¼ö ¾ø´Â ÇÁ·Î±×·¥¿¡ »ç¿ëÇÏ¿©¼­´Â ¾ÊµÈ´Ù. ÀÌ´Â lddÀÇ  ¸Å´º
¾ó¿¡µµ ¸í¹éÈ÷ ¾ð±ÞµÈ ¾ê±âÀÌ´Ù. ldd´Â Á÷Á¢ ±× ÇÁ·Î±×·¥À» È£ÃâÇÔÀ¸·Î½á ¼öÇà
µÇ±â ¶§¹®¿¡ ¿¹±âÄ¡ ¸øÇÑ ÄÚµåÀÇ ½ÇÇàÀ» °¡Á®¿Ã¼ö Àֱ⠶§¹®ÀÌ´Ù. 
<tag/ºñȣȯ ¶óÀ̺귯¸®/
 
 »õ·Î¿î ¹öÀüÀÇ ¶óÀ̺귯¸®°¡ ±¸¹öÀüÀÇ ¶óÀ̺귯¸®¿Í ÀÌÁøÄÚµå Â÷¿ø¿¡¼­ ȣȯ
µÇÁö  ¾Ê´Â´Ù¸é sonameÀº º¯°æµÉ Çʿ䰡 ÀÖ´Ù.  ÀÌÁøÄڵ忡¼­ ºñȣȯµÇ´Â °æ
¿ì¿¡´Â  ´ÙÀ½ÀÇ ³×°¡Áö ÀÌÀ¯°¡ °¡Àå ±âº»ÀûÀÌ´Ù. 
<enum>
<item> ÇÔ¼öÀÇ ÇൿÀÌ º¯°æµÇ¾î  ¿ø·¡ÀÇ ÇÔ¼ö½ºÆå(±Ô°Ý)À» ´õ ÀÌ»ó  ¸¸Á·ÇÏÁö ¸øÇÒ 
¶§.
<item> ¿Ü·¡ µ¥ÀÌÅÍ ¾ÆÀÌÅÛÀÌ º¯ÇßÀ»¶§(¿¹¿Ü:¿É¼Ç  ¾ÆÀÌÅÛÀ» ¶óÀ̺귯¸®ÀÇ ±¸Á¶ ¸¶
Áö¸· ºÎºÐ¿¡ ÷°¡ÇÏ´Â °ÍÀº ÀÌ·¯ÇÑ ¾ÆÀÌÅÛ±¸Á¶°¡ ¶óÀ̺귯¸®ÀÇ ³»ºÎ¿¡ ÇÒ´çµÇ
¾î ÀÖ´ÂÇÑ ±¦ÂúÀ½)
<item> ¿Ü·¡ÇÔ¼ö°¡ Á¦°ÅµÇ¾úÀ» ¶§.
<item> ¿Ü·¡ÇÔ¼öÀÇ ÀÎÅÍÆäÀ̽º°¡ º¯°æµÇ¾úÀ» ¶§.
</enum>
</descrip>
 ¸¸¾à ÀÌ·¯ÇÑ ¿øÀεéÀ» ´ç½ÅÀÌ ÇÇÇØ°£´Ù¸é  ´ç½ÅÀÇ  ¶óÀ̺귯¸®´Â ÀÌÁø¸ðµå¿¡
¼­ ȣȯ°¡´ÉÇÒ °ÍÀÌ´Ù. ´Ù¸¥  ½ÄÀ¸·Î  ¾ê±âÇÏÀÚ¸é ´ç½Å ÀÀ¿ëÇÁ·Î±×·¥ÀÇ  ÀÌÁø 
ÀÎÅÍÆäÀ̽º(ABI) ȣȯ¼ºÀº ÀÌ·¯ÇÑ  º¯°æÀ» ÇÏÁö¾Ê´Â´Ù¸é ÁöÄÑÁú  °ÍÀÌ´Ù.  ¿¹
¸¦µé¸é ´ç½ÅÀº »õ·Î¿î ÇÔ¼ö¸¦ Ãß°¡Ç쵂 ±âÁ¸ÇÔ¼öµéÀ» »èÁ¦ÇÏÁö¾Ê±æ ¿øÇÒ¼ö ÀÖ
À» °ÍÀÌ´Ù. ´ç½ÅÀº ±¸¹öÀüÀÇ  ÇÁ·Î±×·¥ÀÌ ¶óÀ̺귯¸® ±¸Á¶ÀÇ ³¡ºÎºÐ¿¡ ¾ÆÀÌÅÛ
À» Ãß°¡Çϰųª, ¶Ç´Â (ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ  ¾Æ´Ñ)¶óÀ̺귯¸®¿¡¼­¸¸ ÀÌ·¯ÇÑ ±¸Á¶¸¦ 
ÇÒ´çÇϰųª, ¶Ç´Â ¾î¶² ƯÁ¤ÇÑ ¾ÆÀÌÅÛÀ»  ¿É¼ÇÈ­ÇÏ´Â(¶Ç´Â ¶óÀ̺귯¸®¿¡¼­  ±× 
¾ÆÀÌÅÛÀ» ä¿ö³Ö´Â)µîµîÀÇ ÀÌ·¯ÇÑ  º¯°æ¿¡ ¿µÇâÀ»  ¹ÞÁö¾ÊÀ½ÀÌ È®½ÇÇÒ¶§¸¸ ±× 
¶óÀ̺귯¸® ±¸Á¶¿¡ ÀÌ·¯ÇÑ ¾ÆÀÌÅÛÃß°¡¸¦ ÇÒ¼öÀÖ´Â °ÍÀÌ´Ù. »ç¿ëÀÚµéÀÌ  ¹è¿­À» 
»ç¿ëÇϰí ÀÖÀ»½Ã¿¡´Â ±×·¯ÇÑ  ±¸Á¶È®ÀåÀ» ¾Æ¸¶ ÇÒ¼ö ¾øÀ» °ÍÀÓ¿¡ À¯ÀÇÇ϶ó.

<sect> µ¿Àû(DL) ¶óÀ̺귯¸®
<p>
 µ¿Àû ¶óÀ̺귯¸®´Â ÇÁ·Î±×·¥ÀÇ ½ÃÀ۽ð¡ ¾Æ´Ñ ´Ù¸¥¶§¿¡ ÀûÀçµÇ´Â ¶óÀ̺귯¸®
¸¦ ¸»ÇÑ´Ù. Ç÷¯±×ÀεîÀÇ ¸ðµâÀº ±×°ÍÀÇ ÇÊ¿ä½Ã±îÁö ÀûÀ縦 ±â´Ù¸®´Â °ÍÀÌ  Çã
¿ëµÇ¹Ç·Î À̵éÀÇ ±¸Çö¿¡  ƯÈ÷ À¯¿ëÇÏ´Ù. ¿¹¸¦µé¸é PAM(Pluggable Authenti- 
cation Module:ÀûÀç°¡´É ÀÎÁõ¸ðµâ)µîÀÇ ½Ã½ºÅÛ¿¡¼­´Â °ü¸®ÀÚ°¡ ÀÎÁõÀ»  ±¸¼º¶Ç
´Â À籸¼ºÇϴµ¥ µ¿Àû ¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ´Ù. ¶ÇÇÑ µ¿Àû ¶óÀ̺귯¸®´Â ¼ö½Ã·Î 
¾ð¾îÄڵ带 ±â°è¾î·Î ÄÄÆÄÀÏÇϰí, ÄÄÆÄÀÏµÈ ¸ðµâµéÀ» È¿À²ÀûÀ¸·Î ¸ØÃã¾øÀÌ  »ç
¿ëÄÚÀúÇÏ´Â ÀÎÅÍÇÁ¸®Å͸¦ ±¸ÇöÇϴµ¥µµ À¯¿ëÇÏ´Ù. ÀÌ·¯ÇÑ  ¹æ¹ýÀº Àú½ºÆ® ÀΟ
ÀÓ ÄÄÆÄÀÏ·¯(JIT)³ª ¸ÖƼ À¯Àú´øÀü(MUD:multi user  dungeon)ÀÇ °³¹ß¿¡µµ À¯
¿ëÇÏ´Ù.

 ¸®´ª½º¿¡¼­´Â µ¿Àû ¶óÀ̺귯¸®´Â Æ÷¸Ë¸¸ÀÇ °üÁ¡¿¡¼­ º»´Ù¸é  Ưº°ÇÑ °ÍÀÌ ¾Æ
´Ï´Ù. Áï,  ±×°ÍÀº À§¿¡¼­ ³íÀÇÇÑ Ç¥ÁØÀûÀÎ ¿ÀºêÁ§Æ® ÆÄÀÏÀ̳ª  Ç¥ÁØÀûÀÎ °øÀ¯ 
¶óÀ̺귯¸®·Î½á ¸¸µé¾îÁø´Ù. °¡Àå Áß¿äÇÑ Â÷ÀÌÁ¡Àº ±×°ÍÀÌ ÇÁ·Î±×·¥ÀÇ  ¸µÅ©½Ã
³ª ½ÃÀ۽ÿ¡ ÀÚµ¿À¸·Î ÀûÀçµÇ´Â °ÍÀÌ  ¾Æ´Ï¶ó´Â °ÍÀÌ´Ù. ±× ´ë½ÅÀ¸·Î 
¶óÀ̺귯¸®¸¦ ¿­°í ½Éº¼À» »ìÇÇ¸ç ¿¡·¯¸¦ Á¦¾îÇÏ°í ´Ý´ÂµîÀÇ API°¡ Á¦°øµÈ´Ù.  CÀÇ »ç
¿ëÀÚ´Â ÀÌ·¯ÇÑ  API¸¦ »ç¿ëÇϱâ À§Çؼ­ <dlfcn.h>¸¦  includeÇÏ¿©¾ß ÇÑ´Ù. 
 ¸®´ª½º¿¡¼­ »ç¿ëµÇ´Â ÀÎÅÍÆäÀ̽º¸¦ ³ª´Â  "dlopen() API"¶ó°í ºÎ¸£¸ç ¼Ö¶ó¸®
½ºÀÇ ±×°Í°ú  Çٽɿ¡ À־´Â µ¿ÀÏÇÏ´Ù. ±×·¯³ª ÀÌ·¯ÇÑ µ¿ÀÏÇÑ ¹æ½ÄÀÇ ÀÎÅÍÆä
À̽º°¡ ¸ðµç Ç÷§Æû¿¡¼­ °°Àº °ÍÀº ¾Æ´Ï´Ù. HP-UX´Â shl_load()¶ó´Â  ´Ù¸¥ ¸Þ
Ä¿´ÏÁòÀ» »ç¿ëÇÏ¸ç  À©µµ¿ìÁî¿¡¼­´Â DLLÀ» ¿ÏÀüÈ÷  ´Ù¸¥ ÀÎÅÍÆäÀ̽º·Î  ´Ù·é
´Ù.  À̽ļº¿¡  ¸ñÇ¥¸¦  µÐ´Ù¸é  Ç÷§Æû°£ÀÇ  ÀÌÁú¼ºÀ»  ¼û±â°ÔÇØÁÖ´Â  ¸î°³ÀÇ   
wrapping ¶óÀ̺귯¸®ÀÇ »ç¿ëÀ» °í·ÁÇØ¾ßÇÑ´Ù. ÇѰ¡Áö ¹æ¹ýÀ¸·Î  glib 
¶óÀ̺귯¸®ÀÇ µ¿Àû ¸ðµâÀûÀç±â´ÉÀÌ ÀÖ´Ù. À̰ÍÀº ÀÌ·¯ÇÑ ÇÔ¼öµéÀÇ À̽ļº ±¸ÇöÀ»  À§ÇØ 
Ç÷§ÆûÀÇ ÇϺο¡ ÀÖ´Â µ¿ÀûÀûÀç·çƾÀ»  »ç¿ëÇÑ´Ù. ÀÌ¿¡°üÇÑ ´õ ÀÚ¼¼ÇÑ  ³»¿ëÀº 
[15]<url url="http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of- 
modules.html" name="developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.html">
¿¡¼­ ¹è¿ï¼ö ÀÖ´Ù.  ¿©±â ¹®¼­¿¡¼­ Àß ¼³¸íµÇ¾î ÀÖÀ¸¹Ç·Î ´õ ÀÌ»ó
ÀÇ ¼³¸íÀº ÇÏÁö ¾Ê°Ú´Ù.  ´Ù¸¥  ¹æ¹ýÀº [16]GNU libtoolÁß¿¡  ÇϳªÀÎ  libltdlÀ» 
¾²´Â °ÍÀÌ´Ù. À̰ÍÀÇ  ´Ù¾çÇÑ ±â´ÉÀ» ¾²±âÀ§Çؼ­´Â  ¾Æ¸¶µµ COBRA   Object 
Broker(ORB)¸¦ º¸±æ ¹Ù¶õ´Ù. ¸®´ª½º¿Í ¼Ö¶ó¸®½º¿¡¼­  Á¦°øÇÏ´Â ±â´É¿¡ ¿©ÀüÈ÷ 
°ü½ÉÀÌ ÀÖ´Ù¸é °è¼Ó ÀоîÁÖ±æ ¹Ù¶õ´Ù. 
<descrip>
<tag/dlopen()/
 
 dlopen(3) ÇÔ¼ö´Â ¶óÀ̺귯¸®¸¦ ¿­¾î¼­ »ç¿ëÁغñ¸¦ ÇÑ´Ù.  C¿¡¼­  ÇÔ¼öÀÇ  ¿ø
ÇüÀº ¾Æ·¡¿Í °°´Ù. 

 void *dlopen(const char *filename, int flag); 

 ¸¸¾à¿¡ ÆÄÀÏÀÇ À̸§ÀÌ  /(Áï, Àý´ë°æ·Î)·Î  ½ÃÀÛÇÑ´Ù¸é  dlopen()Àº 
¶óÀ̺귯¸®¸¦ Ž»öÇÏÁö ¾ÊÀ»°ÍÀÌ´Ù. ±×·¸Áö ¾Ê´Ù¸é dlopen()Àº  ´ÙÀ½°ú °°Àº ¼ø¼­·Î 
¶óÀ̺귯¸®¸¦ Ž»öÇÑ´Ù.
<enum>
<item> ÄÝ·ÐÀ¸·Î ºÐ¸®µÈ »ç¿ëÀÚÀÇ LD_LIBRARY ȯ°æº¯¼öÀÇ °¢ µð·ºÅ丮 ¸ñ·Ï.
<item> /etc/ld.so.cache¿¡ ¸í¼¼µÈ ¶óÀ̺귯¸®µé
<item> /lib, ±×´ÙÀ½Àº /usr/lib
</enum>
 dlopen()¿¡¼­ Ç÷¡±×ÀÇ °ªÀº µ¿Àû ¶óÀ̺귯¸®·Î ºÎÅÍÀÇ ÄÚµå ¼öÇà½Ã¿¡ ¹ÌÁ¤ÀÇ
µÈ ½Éº¼°ªÀ» ÇØ°áÇÔÀ» ¶æÇÏ´Â RTLD_LAZY, dlopen()ÀÌ ¸®ÅϵDZâÀü   ¸ðµç ¹Ì
Á¤ÀÇµÈ ½Éº¼ÀÇ °ªÀÌ ÇØ°áµÇ´Â, ±×·¸Áö   ¾ÊÀ¸¸é ½ÇÆÐ¸¦ ¶æÇÏ´Â  RTLD_NOW   
ÁßÀÇ Çϳª°¡ µÇ¾î¾ß ÇÑ´Ù.   ¶óÀ̺귯¸®³»¿¡¼­ Á¤ÀÇµÈ ¿Ü·¡½Éº¼ÀÌ ¼øÂ÷ÀûÀ¸·Î 
È£ÃâµÇ´Â ¶óÀ̺귯¸®µé¿¡ ÀÇÇØ¼­ À¯È¿ÇØÁüÀ»  ¶æÇÏ´Â  RTLD_ GLOBAL¶ÇÇÑ   
»ç¿ëµÇ°Å³ª ¿É¼ÇÀÌ  µÉ ¼ö  ÀÖ´Ù. µð¹ö±ë ÁßÀ̶ó¸é  RTLD_LAZY´Â ¹ÌÇØ°áµÈ  
½Éº¼ÂüÁ¶¿¡ ÀÇÇÑ ¿¹Ãø ºÒ°¡´ÉÀÇ ¿¡·¯¸¦  ÀÏÀ¸Å³¼ö   ÀÖÀ¸¹Ç·Î RTLD_NOW¸¦  
 »ç¿ëÇÏ±æ ¿øÇÒ   °ÍÀÌ´Ù. RTLD_NOW´Â ¶óÀ̺귯¸®¸¦  ¿©´Âµ¥ ¾à°£ ´À¸®´Ù. 
À̰ÍÀÌ ¹®Á¦°¡ µÈ´Ù¸é RTLD_LAZY·Î ³ªÁß¿¡ ÀüȯÇϸéµÈ´Ù. 

 ¸¸¾à ¶óÀ̺귯¸®µéÀÌ ¼­·Î ÀÇÁ¸ÇÒ °æ¿ì(¿¹¸¦ µé¸é  X°¡ Y¸¦ ÀÇÁ¸ÇÑ´Ù¸é), ÀÇ
Á¸ÀÌ µÇ¾îÁÖ´Â ¶óÀ̺귯¸®(ÀÌ ¿¹¿¡¼­´Â Y)¸¦ ¸ÕÀú ·ÎµåÇÏ¿©¾ß ÇÑ´Ù. 
 dlopen()ÀÇ ¸®ÅϰªÀº (ÀûÀçµÇ´Â µ¿Àû ¶óÀ̺귯¸®ÀÇ ÀÏÁ¾ÀÇ ÆÄÀÏ) ÇÚµé(handle)
ÀÌ´Ù. ±×°ÍÀº ´Ù¸¥ µ¿Àû ¶óÀ̺귯¸® ·çƾ¿¡¼­ »ç¿ëµÇ¾îÁú ¾î¶°ÇÑ °ªÀÌ¶ó  °í·Á
µÉ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀûÀç½Ãµµ°¡  ½ÇÆÐÇÏ¸é  dlopen()Àº NULLÀ» ¸®ÅÏÇÒ °ÍÀ̸ç 
Á¡°ËÇØ º¸±æ ¹Ù¶õ´Ù. °°Àº ¶óÀ̺귯¸®°¡ µÎ¹ø  ÀÌ»ó dlopen()¿¡ ÀÇÇØ¼­ ·ÎµåµÈ
´Ù¸é °°Àº ÆÄÀÏ ÇÚµéÀÌ ¸®ÅϵȴÙ.

 ¸¸¾à ¶óÀ̺귯¸®¿¡¼­  _init·Î  ¸í¸íµÈ ·çƾÀ»  ¿ÜºÎ È£Ãâ ÇÑ´Ù¸é ±×  Äڵ尡 
dlopen()ÀÇ ¸®ÅÏÀü¿¡ ¼öÇàµÈ´Ù. ÀÌ·¯ÇÑ »ç½ÇÀ»  ÀÌ¿ëÇØ ´ç½ÅÀÇ ¶óÀ̺귯¸®¿¡¼­ 
ÃʱâÈ­  ·çƾÀ» ±¸ÇöÇÏ¸é µÉ °ÍÀÌ´Ù.

<tag/dlerror()/
 ¿¡·¯´Â  dlerror()À»  È£ÃâÇÔÀ¸·Î½á   º¸°íµÇ´Âµ¥, ÀÌ   ÇÔ¼ö´Â  °¡Àå  ÃÖ±ÙÀÇ 
dlopen(), dlsym(), ¶Ç´Â dlclose()·Î  ÀÎÇØ  ¹ß»ýÇÑ ¿¡·¯¸¦  ±â¼úÇÏ´Â   ½ºÆ®¸µ
À» ¸®ÅÏÇÑ´Ù.  ÇѰ¡Áö  Ưº°ÇÑ Á¡Àº dlerror()¸¦ È£ÃâÇÏ°í ³­µÚ¿¡´Â ±×  ´ÙÀ½ºÎ
ÅÍ´Â ¶Ç´Ù¸¥ ¿¡·¯°¡  ¹ß»ýÇϱâ Àü±îÁö  dlerror()´Â NULLÀ» ¸®ÅÏÇÑ´Ù´Â °ÍÀÌ
´Ù.

<tag/dlsym()/
 µ¿Àû ¶óÀ̺귯¸®¸¦ ÀûÀçÇÏ°í »ç¿ëÇÏÁö ¸øÇÑ´Ù¸é ¾Æ¹«·± Àǹ̵µ ¾øÀ»  °ÍÀÌ´Ù. 
dlsym(3)Àº ¶óÀ̺귯¸® »ç¿ëÀÇ °¡Àå ÁÖµÈ ·çƾÀÌ¸ç  ÀÌ ÇÔ¼ö´Â ¿ÀÇÂµÈ 
¶óÀ̺귯¸®¿¡¼­  ½Éº¼°ªÀ» Á¶»çÇÑ´Ù. ÀÌÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾîÀÖ´Ù.

void *dlsym(void *handle, char *symbol);

 handleÀº dlopen()¿¡ ÀÇÇØ ¸®ÅϵǴ °ªÀ̸ç symbolÀº NIL-·Î ³¡³ª´Â  ¹®ÀÚ¿­
ÀÌ´Ù. dlsym()ÀÇ °á°ú°ªÀ» void * ŸÀÙÀÇ Æ÷ÀÎÅÍ¿¡ ÀúÀåÇÏ¸é  ¸Å¹ø »ç¿ë½Ã¸¶´Ù 
ij½ºÆ® ¿¬»êÀ» ¼öÇàÇØ¾ß ÇϹǷÎ(±×¸®°í, ÇÁ·Î±×·¥À» À¯ÁöÇÏ·Á´Â ¸¹Àº  ´Ù¸¥ »ç
¶÷µé¿¡°Ô ÀûÀº  Á¤º¸¹Û¿¡ ÁÖÁö¸øÇÒ °ÍÀ̹ǷÎ) ÇÇÇÒ¼ö ÀÖ´Ù¸é ÀÌ·¸°Ô ÇÏÁö¸»±æ 
¹Ù¶õ´Ù. 

 dlsym()Àº ½Éº¼ÀÌ ¹ß°ßµÇÁö ¾ÊÀº°æ¿ì¿¡ NULL°ªÀ»  ¸®ÅÏÇϰԵȴÙ. ¸¸¾à¿¡ ¾î
¶² ½Éº¼ÀÌ °áÄÚ Á¦·Î³ª NULL°ªÀ» °¡ÁöÁö  ¾ÊÀ» °ÍÀ» ´ç½ÅÀÌ ¾Ë°í ÀÖ´Ù¸é ¾Æ
¹«·± ¹®Á¦µµ ¾øÀ¸³ª ¸¸¾à ±×·¸Áö ¾Ê´Ù¸é ÀáÀçÀûÀÎ ¸ðÈ£¼ºÀÌ Á¸ÀçÇÏ°Ô µÈ´Ù, Áï 
¸¸¾à¿¡ NULL°ªÀ» °¡Áö°Ô µÈ °æ¿ì ±×°ÍÀÌ ±×·± ½Éº¼ÀÌ Á¸ÀçÇÏÁö ¾Ê´Â´Ù´Â °Í
ÀÎÁö ¾Æ´Ï¸é ½ÇÁ¦·Î ±×  ½Éº¼ÀÇ °ªÀÌ NULLÀÎÁö ÇÏ´Â  °ÍÀÌ´Ù. Ç¥ÁØÀûÀÎ ÇØ°á
Ã¥Àº dlerror()À» È£Ãâ(Á¸ÀçÇÒ¼ö ÀÖ´Â   ¸ðµç ¿¡·¯ÀÇ  °¡´É¼ºÀ» ÇØ¼ÒÇϴ°ÍÀÓ) 
ÇÏ°í ±×´ÙÀ½À¸·Î ½Éº¼°ªÀ» ¾Ë±âÀ§ÇØ dlsym()À» È£ÃâÇÑ   µÚ dlerror()À»  Çѹø
´õ È£ÃâÇÏ¿© ¿¡·¯°¡ ¹ß»ýÇß´ÂÁö¸¦ Á¡°ËÇÏ´Â °ÍÀÌ´Ù.  ÀÌ ºÎºÐÀÇ Äڵ带 ¹ßÃéÇÑ
´Ù¸é  ¾Æ·¡¿Í °°À» °ÍÀÌ´Ù.
<verb>
dlerror();
 /* ¿¡·¯ÄÚµåÀÇ ÃʱâÈ­ */
s = (actual_type) dlsym(handle, symbol_being_searched_for); 
 if ((err = dlerror()) != NULL) 
  /* ½Éº¼°ªÀ» ãÁö ¸øÇÒ¶§ */
  else 
  /* ½Éº¼°ªÀ» ã¾ÒÀ» ¶§ ±× °ªÀÌ s¿¡ ÀÖÀ½ */
</verb>
<tag/dlclose()/
 dlclose()´Â dlopen()ÀÇ ¿ªÀ¸·Î½á µ¿Àû ¶óÀ̺귯¸®¸¦ ´Ý´Âµ¥ »ç¿ëµÈ´Ù. µ¿Àû 
¶óÀ̺귯¸®´Â µ¿Àû ÆÄÀÏÇڵ鿡 °üÇÑ ¸µÅ©¼öÈ¿¸¦ °è¼Ó  À¯ÁöÇϰí ÀÖÀ¸¹Ç·Î  Àû¾î
µµ dlopen()ÀÌ È£ÃâµÈ Ƚ¼ö¸¸Å­ÀÇ dlclose()ÀÇ ¼öÇàÀÌ  ¾ø±â Àü¿¡´Â ½ÇÁ¦ÀûÀ¸·Î 
¸Þ¸ð¸®¿¡¼­ »èÁ¦µÇÁö ¾Ê´Â´Ù.  ±×·¡¼­ °°Àº ÇÁ·Î±×·¥ÀÌ °°Àº  ¶óÀ̺귯¸®¸¦ ¿©
·¯¹ø È£ÃâÇÏ´Â °ÍÀº ¾Æ¹«·± ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù.
</descrip>

<bf>µ¿Àû ¶óÀ̺귯¸®ÀÇ ¿¹</bf>
 dlopen()ÀÇ ¸Å´º¾ó ÆäÀÌÁö¿¡ ³ª¿À´Â µ¿Àû¶óÀ̺귯¸®ÀÇ  ¿¹°¡ ¾Æ·¡¿¡ ÀÖ´Ù. ¿¹
¿¡¼­´Â ¼öÇжóÀ̺귯¸®°¡ ·ÎµåµÇ°í 2.0ÀÇ cosine°ªÀÌ  Ãâ·ÂµÇ¸ç ¸Å¼ø°£¸¶´Ù ¿¡
·¯¸¦ °Ë»ç(±Ç°íµÊ)ÇÑ´Ù. 
<code>
    #include <stdio.h>
    #include <dlfcn.h>
    int main(int argc, char **argv) 
        void *handle;
        double (*cosine)(double);
        char *error;
        handle = dlopen ("/lib/libm.so", RTLD_LAZY);
        if (!handle) 
            fputs (dlerror(), stderr);
            exit(1);
        

        cosine = dlsym(handle, "cos");
        if ((error = dlerror()) != NULL)  
            fputs(error, stderr);
            exit(1);
        

        printf ("%f", (*cosine)(2.0));
        dlclose(handle);
    </code>

 ¸¸¾à À§ÀÇ ÇÁ·Î±×·¥ÀÇ À̸§ÀÌ foo.c ¶ó¸é ´ÙÀ½ÀÇ ¸í·ÉÀ» ½á¼­ ½ÇÇàÇÁ·Î±×·¥À» 
¸¸µé ¼ö ÀÖ´Ù. 

gcc -Wl,export-dynamic -o foo foo.c -ldl 
 -WI, export-dynamic ¿É¼ÇÀº ½ÇÁúÀûÀ¸·Î ÇÊ¿äÇÑ °ÍÀº ¾Æ´Ï³ª ¶§¶§·Î À¯¿ëÇÔ
À» ¾Ë°ÔµÉ °ÍÀÌ´Ù.  ±×°ÍÀº ld¿¡ Á¤ÀǵǾî Àִµ¥ ELFÆÄÀÏÀÇ »ý¼º½Ã¿¡ À̿ɼÇ
Àº ¸ðµç ½Éº¼À» ´ÙÀ̳ª¹Í ½Éº¼Å×ÀÌºí¿¡ ºÎ°¡ÇÑ´Ù. Åë»óÀûÀ¸·Î ´ÙÀ̳ª¹Í ½Éº¼Å×
À̺íÀº  µ¿Àû  ¿ÀºêÁ§Æ®¿¡¼­  »ç¿ëµÇ´Â  ½Éº¼¸¸À»  °¡Áö°í  ÀÖ´Ù.  ÀÌ  ¿É¼ÇÀº 
dlopen()ÀÇ ¾î¶² ¿ëµµ¿¡¼­ ÇÊ¿äÇÏ´Ù.  -WI, export-dynamic º¸´Ù -rdynamicÀ» 
¾²¶ó°í ¸»ÇÒ¼öµµ  ÀÖ°ÚÁö¸¸ ELF¹®¼­¿¡ ÀÇÇϸé -rdynamicÀº ºñ  ¸®´ª½º  ½Ã½º
ÅÛÀÇ gcc¿¡¼­´Â Ç×»ó Á¦´ë·Î µ¿ÀÛÇÏ´Â °ÍÀº ¾Æ´Ï¶ó°í ÇÑ´Ù.
</p>

<sect> ºÎ°¡Àû ³»¿ëµé<p>
<bf>nm ¸í·É</bf>

 nm¸í·ÉÀº ÁÖ¾îÁø ¶óÀ̺귯¸®ÀÇ ½Éº¼¸ñ·ÏÀ» º¸°íÇÑ´Ù. ±×°ÍÀº °øÀ¯ ¹× Á¤Àû
¶óÀ̺귯¸® ¸ðµÎ¿¡¼­ µ¿ÀÛÇÑ´Ù. ÁÖ¾îÁø ¶óÀ̺귯¸®ÀÇ Á¤ÀÇµÈ ½Éº¼¸í°ú °ª ±×¸®°í 
ŸÀÙÀ» ¾Ë·ÁÁØ´Ù. ÀÌ ¸í·ÉÀº ¶ÇÇÑ ¶óÀ̺귯¸®¿¡¼­ ÀÌ Á¤º¸°¡ À¯È¿ÇÏ°Ô  µÇ¾îÀÖ
´Ù¸é(-ls¿É¼ÇÀ» º¸¶ó) ¼Ò½ºÄÚµå»óÀÇ ¾îµð¿¡¼­ ½Éº¼ÀÌ Á¤ÀǵǾú´Â°¡(ÆÄÀÏÀ̸§°ú 
¶óÀγѹö·Î)µµ ¾Ë·ÁÁØ´Ù.

 ½Éº¼Å¸ÀÙ¿¡ ´ëÇØ¼­´Â Á»´õ ¼³¸íÀÌ ÇÊ¿äÇÏ´Ù. ŸÀÙÀÌ º¸°íµÉ ¶§ ¼Ò¹®ÀÚ´Â Áö¿ª
º¯¼öÀÓÀ» ³ªÅ¸³»¸ç ´ë¹®ÀÚ´Â Àü¿ª(¿ÜºÎ)º¯¼öÀÓÀ» ³ªÅ¸³½´Ù. ÀüÇüÀûÀÎ ½Éº¼Å¸ÀÙ
¿¡´Â T(ÄÚµåºÎºÐ¿¡¼­ º¸ÅëÀÇ Á¤ÀÇ),  D(ÃʱâÈ­µÈ µ¥ÀÌŸ ºÎºÐ), B(ÃʱâÈ­ ¾ÊµÈ 
µ¥ÀÌÅÍ ¼½¼Ç), U(¹ÌÁ¤ÀÇ:½Éº¼ÀÌ ¶óÀ̺귯¸®¿¡¼­ »ç¿ëµÇ³ª  ±× ¶óÀ̺귯¸®¿¡ ÀÇ
ÇØ¼­ Á¤ÀǵÇÁö ¾ÊÀ½), W(´Ù¸¥ ¶óÀ̺귯¸®°¡ ÀÌ ½Éº¼À» Á¤ÀÇÇÏ¸é ±× ³»¿ëÀÌ ÀÌ
¸¦ ´ëÄ¡(override)ÇÔ)µîÀÌ ÀÖ´Ù.
 
 ÇÔ¼öÀÇ À̸§Àº ¾Ë°í ÀÖÁö¸¸ Á¤È®È÷ ¾î´À  ¶óÀ̺귯¸®¿¡¼­ Á¤ÀǵǾîÀÖ´ÂÁö ¸ð
¸¥´Ù¸é nm ¸í·ÉÀÇ -o¿É¼Ç(°¢ ¶óÀθ¶´Ù ÆÄÀϸíÀ» ¾Õ¿¡  º¸¿©ÁÜ)À» »ç¿ëÇÏ°í µ¿
½Ã¿¡ grep¸í·ÉÀ» ½á¼­   ¶óÀ̺귯¸®ÀÇ  À̸§À»  ã¾Æº¸±æ   ¹Ù¶õ´Ù. Bourne   
shell¿¡¼­ /lib, /usr/libÀÇ ¸ðµç ¶óÀ̺귯¸®¿Í /usr/lib,  /usr/local/libÀÇ Á÷°è ¼­
ºêµð·ºÅ丮¿¡¼­ "cos"¸¦ ã´Â °ÍÀº ¾Æ·¡¿Í °°À» °ÍÀÌ´Ù.
<code>
nm -o /lib/* /usr/lib/* /usr/lib/*/* 
   /usr/local/lib/* 2> /dev/null | grep 'cos$'
</code>
´õ ÀÌ»óÀÇ ÀÚ¼¼ÇÑ ³»¿ëÀº [17]info:binutils#nmÀ» ÂüÁ¶Ç϶ó
 °øÀ¯ ¶óÀ̺귯¸®´Â ½ºÅ©˜PlÆ®Àϼö ÀÖ´Ù.

 GNU ·Î´õ´Â °øÀ¯ ¶óÀ̺귯¸®°¡  ¹ÙÀ̳ʸ® À̿ܿ¡µµ ƯÁ¤ÇÑ ½ºÅ©¸³Æ®¾ð¾î·Î 
ÀÛ¼ºµÈ ÅØ½ºÆ®ÆÄÀϷεµ °¡´ÉÇϵµ·Ï Çã¿ëÇϰí ÀÖÀ½À» ¾ËÇʿ䰡 ÀÖ´Ù. À̰ÍÀº °£
Á¢ÀûÀ¸·Î ´Ù¸¥ ¶óÀ̺귯¸®µéÀ» Á¶ÇÕÇϴµ¥ À¯¿ëÇÏ´Ù. ¿¹¸¦ µé¾î ³ªÀÇ ½Ã½ºÅÛÁß
ÀÇ Çϳª¿¡ »ç¿ëµÈ /usr/lib/libc.soÀÇ ¸ñ·ÏÀÌ ¾Æ·¡¿¡ ³ª¿ÍÀÖ´Ù.

/* °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸ÕÀú »ç¿ëÇÏ¸ç ´Ü  ¾î¶² ÇÔ¼öµéÀº Á¤Àû ¶óÀ̺귯¸®À̹Ç
·Î ±×°ÍÀ» ´ÙÀ½Â÷·Ê·Î »ç¿ëÇÏ´Â GNU ld scriptÀÓ.  */
GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a )
 ´õ ¸¹Àº  ³»¿ëÀº ld   ¸µÄ¿¿¡ °üÇÑ  texinfo ¹®¼­¸¦  º¸¶ó.  ÀϹÝÀûÀÎ  Á¤º¸´Â 
info:ld#Options, info:ld#Commands, ±×¸®°í ºñ½ÁÇÑ  info:ld#Option Commands
µî¿¡¼­ ã¾Æº¸¶ó

<bf>GNU Libtool</bf>

 ´Ù¾çÇÑ ½Ã½ºÅÛ¿¡ À̽İ¡´ÉÇÑ  ÀÀ¿ëÇÁ·Î±×·¥À» Á¦ÀÛÁßÀ̶ó¸é  GNU LibtoolÀ»  
 »ç¿ëÇÏ¿© ¶óÀ̺귯¸®¸¦ ¸¸µé°í ¼³Ä¡ÇÒ °ÍÀ» °í·ÁÇØ º¸¶ó. GNU  LibtoolÀº Àü
ÇüÀûÀÎ ¶óÀ̺귯¸® Áö¿ø  ½ºÅ©¸³Æ®ÀÌ´Ù. LibtoolÀº  ¶óÀ̺귯¸® »ç¿ëÀÇ º¹À⼺
À» ÀϰüµÇ°í À̽İ¡´ÉÇÑ ÀÎÅÍÆäÀ̽º¸¦ ÅëÇØ¼­  Á¦°ÅÇØÁÙ °ÍÀÌ´Ù. LibtoolÀº ¿À
ºêÁ§Æ® ÆÄÀÏÀÇ »ý¼º, Á¤Àû  ¹× °øÀ¯¶óÀ̺귯¸®ÀÇ ¸µÅ©,  ½ÇÇà ¹ÙÀ̳ʸ®ÀÇ ¸µÅ© 
¹× µð¹ö±×, ¶óÀ̺귯¸®ÀÇ ¼³Ä¡, ½ÇÇà ¹ÙÀ̳ʸ®ÀÇ ¼³Ä¡¸¦ À§ÇÑ À̽ÄÀû ÀÎÅÍÆäÀÌ
½º¸¦  Á¦°øÇÑ´Ù. ±×¾È¿¡´Â  libltdlÀ̶ó´Â µ¿ÀûÀûÀç   ÇÁ·Î±×·¥À» À§ÇÑ  À̽ļº 
wrapper°¡ ¶ÇÇÑ Æ÷ÇԵȴÙ. ´õ  ¸¹Àº Á¤º¸´Â [19]<url url="http://www.gnu.org/software/libtool/manual.html" 
name="www.gnu.org/software/libtool/manual.html"> 
¿¡¼­ ã¾Æº¸±æ ¹Ù¶õ´Ù. 
</p>

<sect> »ç¿ë¹ýÀÇ ¿¹½Ã<p> 
 ¾Æ·¡ ºÎÅÍ´Â (Á¤Àû, °øÀ¯ ¹× µ¿Àû  ¶óÀ̺귯¸®ÀÇ)¼¼°¡Áö  ÇüÅÂÀÇ ¸ðµç 
¶óÀ̺귯¸®ÀÇ ¿¹ÀÌ´Ù. libhello.c´Â libhello.h¸¦ Çì´õ·Î  ÇÏ´Â º¸ÅëÀÇ  ¶óÀ̺귯¸®À̸ç, 
demo_use.c´Â libhello.c¸¦ È£ÃâÇÏ´Â Æò¹üÇÑ ÇÁ·Î±×·¥ÀÌ´Ù. ±× ´ÙÀ½¿¡´Â À̰ÍÀÌ 
¾î¶»°Ô Á¤Àû  ¹× °øÀ¯¶óÀ̺귯¸®·Î   »ç¿ëµÇ´Â°¡ÀÇ ¿¹¸¦  º¸¿©ÁÖ´Â ½ºÅ©¸³Æ® 
(script_static, script_shared)°¡ ÁÖ¼®°ú  ÇÔ²² ÀÖÀ¸¸ç, ±×  ´ÙÀ½¿¡´Â °øÀ¯  
¶óÀ̺귯¸®°¡   ¾î¶»°Ô  µ¿Àû   ¶óÀ̺귯¸®·Î  »ç¿ëµÇ´ÂÁö¸¦   º¸¿©ÁÖ´Â  demo_ 
dyanmic.c¿Í script_dynamicÀÌ ÀÖ´Ù.

File libhello.c
/* libhello.c - ¶óÀ̺귯¸®·Î »ç¿ëµÇ´Â ÆÄÀÏ */
#include <stdio.h>
void hello(void) 
  printf("Hello, library world.");

<code>
File libhello.h
/* libhello.h - Çì´õ ÆÄÀÏ */

void hello(void);
</code>
   
File demo_use.c
/* demo_use.c -- ¹Ù·Î hello·çƾÀ» »ç¿ëÇÏ´Â ¿¹ */
#include "libhello.h"
int main(void) {
 hello();
 return 0;
}

<code>
File script_static
#!/bin/sh
# Á¤Àû ¶óÀ̺귯¸® µ¥¸ð
# Á¤Àû ¶óÀ̺귯¸®ÀÇ ¿ÀºêÁ§Æ® ÆÄÀÏÀÎ libhello-static.o»ý¼º.
# libhello-staticÀ̶ó´Â À̸§À» »ç¿ëÇÏ´Â °ÍÀº Á¤Àû ¶óÀ̺귯¸®
# ¿Í µ¿Àû ¶óÀ̺귯¸® »ç¿ëÀ» ¾ö¿¬È÷ ±¸º°Çϱâ À§ÇѰÍÀÏ »ÓÀ̹Ç
# ·Î -staticÀ̶ó´Â À̸§À» ¿ÀºêÁ§Æ® ÆÄÀÏÀ̳ª Á¤Àû ¶óÀ̺귯¸®¿¡
# ¾µ ÇÊ¿ä´Â ¾ø´Ù.
gcc -Wall -g -c -o libhello-static.o libhello.c
# Á¤Àû ¶óÀ̺귯¸®ÀÇ »ý¼º.
ar rcs libhello-static.a libhello-static.o
# ¿©±â¼­ libhello-static.a¸¦ ³ªÁß¿¡ »ç¿ëÇϱâ
# À§ÇØ ¾îµò°¡¿¡ º¹»çÇØ ³õÀ»¼ö ÀÖÀ» °ÍÀÌ´Ù.
# µ¥¸ð ¸ñÀûÀ¸·Î »ç¿ëÇϱâ À§Çؼ­ ¿ì¸®´Â
# ÇöÀçÀÇ µð·ºÅ丮¿¡ ¶óÀ̺귯¸®¸¦ µÎ±â·Î ÇÑ´Ù.
# demo_use ÇÁ·Î±×·¥ÀÇ ÄÄÆÄÀÏ 
gcc -Wall -g -c demo_use.c -o demo_use.o
# demo_use ÇÁ·Î±×·¥ÀÇ »ý¼º; -L. ¿É¼ÇÀº "." °¡ ÇÁ·Î±×·¥
# ÀÇ »ý¼º½Ã¿¡ °Ë»öµÇ°Ô ÇÑ´Ù.  ÀÌ ¸í·ÉÀ¸·Î libhello-static.a¿¡ 
# ÀÖ´Â °ü·ÃµÈ ¿ÀºêÁ§Æ®°¡ ÆÄÀÏ demo_use_static¿¡ »ðÀԵȴÙ.
gcc -g -o demo_use_static demo_use.o -L. -lhello-static
# ÇÁ·Î±×·¥ÀÇ ½ÇÇà
./demo_use_static
  </code> 
<code>
File script_shared
#!/bin/sh
# °øÀ¯ ¶óÀ̺귯¸®ÀÇ µ¥¸ð
# °øÀ¯ ¶óÀ̺귯¸®ÀÇ ¿ÀºêÁ§Æ® ÆÄÀÏ libhello.oÀÇ »ý¼º.
gcc -fPIC -Wall -g -c libhello.c
# °øÀ¯ ¶óÀ̺귯¸®ÀÇ »ý¼º.
# -lc¸¦ »ç¿ëÇÏ¿© C ¶óÀ̺귯¸®¿Í ¸µÅ©ÇÑ´Ù. ¿Ö³ÄÇϸé
# libhello°¡ C ¶óÀ̺귯¸®¿¡ ÀÇÁ¸µÇ±â ¶§¹®ÀÌ´Ù.
gcc -g -shared -Wl,-soname,libhello.so.0 \
   -o libhello.so.0.0 libhello.o -lc
# ¿©±â¼­ libhello.so.0.0¸¦ ¾î¶² µð·ºÅ丮 À̸¦Å׸é 
# /usr/local/lib¿¡ º¹»çÇÏ¿©µµ µÈ´Ù.
# ÀÌÁ¦ ldconfig¸¦ ÀÌ¿ë ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µç´Ù.
# sonameÀ» ¼Â¾÷ÇÔ.  ¾Æ·¡¿Í °°ÀÌ ÇØµµ ¹«¹æÇÏ´Ù.
# ln -sf libhello.so.0.0 libhello.so.0
# ¿©±â¼­´Â ±×³É ldconfig·Î Çϵµ·Ï ÇÑ´Ù.
/sbin/ldconfig -n .
# linker nameÀ» ¼ÂÆÃÇÑ´Ù.
# Á»´õ ¸é¹ÐÇÏ°Ô ÇÏ·Á¸é ÀÌ¹Ì Á¸ÀçÇÏ´Â linker nameÀÌ
# ÀÖ´ÂÁö È®ÀÎÇØº¸°í ¸¸¾à ±×·¸´Ù¸é ±×³É ³öµÖ¾ß ÇÒÁö
# ¾Æ´ÑÁö¸¦ Àß Ã¼Å©ÇØ¾ßÇÑ´Ù.
ln -sf libhello.so.0 libhello.so
# demo_use ÇÁ·Î±×·¥ ÆÄÀÏÀ» ÄÄÆÄÀÏÇÑ´Ù.
gcc -Wall -g -c demo_use.c -o demo_use.o
# demo_use ÇÁ·Î±×·¥ÀÇ »ý¼º.
# -L. Àº "." ÀÌ ÇÁ·Î±×·¥ÀÇ »ý¼º½Ã¿¡ °Ë»öµÇµµ·Ï
# ÇÑ´Ù. "." °¡ ÇÁ·Î±×·¥ ½ÇÇà½Ã¿¡ °Ë»öµÇ´Â °ÍÀÌ
# ¾Æ´Ô¿¡ À¯ÀÇÇ϶ó.
gcc -g -o demo_use demo_use.o -L. -lhello
# ÇÁ·Î±×·¥ ½ÇÇà. LD_LIBRARY_PATH¸¦ »ç¿ë
# ÇÏ¿© °øÀ¯ ¶óÀ̺귯¸®°¡ ¾îµð¿¡ Àִ°¡¸¦
# ÇÁ·Î±×·¥¿¡ ¾Ë·Á ÁÖ¾î¾ßÇÑ´Ù.
LD_LIBRARY_PATH="." ./demo_use

</code>
File demo_dynamic.c
/* demo_dynamic.c --  "hello" routineÀÇ 
                   µ¿ÀûÀûÀç¿Í »ç¿ëÀÇ ¿¹ */

/* dlfcn.h ÆÄÀÏÀÌ µ¿ÀûÀûÀç ¶óÀ̺귯¸® ·çƾ¿¡ ÇÊ¿äÇÔ */
#include <dlfcn.h>
#include <stdio.h>
/* "libhello.h"¸¦ includeÇÒ Çʿ䰡 ¾øÀ½¿¡ À¯ÀÇÇ϶ó.
   ±×·¸Áö¸¸ ±×¿Í °ü·ÃÇÏ¿© ¾î¶² °ÍÀº ¹Ýµå½Ã ¸í½ÃÇØ¾ßÇÑ´Ù;
   Áï, dlsym()À¸·Î ¾òÀº °ªÀ» °¡Áö°í ÀÖÀ» µ¥ÀÌÅÍÀÇ Å¸ÀÙ
   Àº ºÐ¸íÈ÷ Á¤ÇØÁ®¾ß ÇÑ´Ù. */
/* "simple_demo_function" ŸÀÙÀº ¸Å°³º¯¼ö¿Í ¸®ÅϰªÀÌ ¾ø´Â
   ÇÔ¼öÀÇ Å¸ÀÙÀ» ¸»ÇÑ´Ù. */
typedef void (*simple_demo_function)(void);

int main(void) 
 const char *error;
 void *module;
 simple_demo_function demo_function;
 /* µ¿Àû ¶óÀ̺귯¸®¸¦ ÀûÀçÇÔ */
 module = dlopen("libhello.so", RTLD_LAZY);
 if (!module) 
   fprintf(stderr, "Couldn't open libhello.so: %s",
           dlerror());
   exit(1);
 

 /* ½Éº¼À» °¡Á®¿È */
 dlerror();
 demo_function = dlsym(module, "hello");
 if ((error = dlerror())) 
   fprintf(stderr, "Couldn't find hello: %s", error);
   exit(1);
 

 /* DL ¶óÀ̺귯¸®ÀÇ ÇÔ¼ö¸¦ È£ÃâÇÑ´Ù. */
 (*demo_function)();
 /* ¸ðµç °ÍÀ» ¸¶Ä£ µÚ È®½ÇÈ÷ Ŭ·Î¡ÇÑ´Ù. */
 dlclose(module);
 return 0;

<code>
   
File script_dynamic
#!/bin/sh
# µ¿Àû ¶óÀ̺귯¸® µ¥¸ð
# libhello.so¿Í friends°¡ À̹Ì
# »ý¼ºµÇ¾úÀ½À» °¡Á¤ÇÑ´Ù. ( dynamicÀÇ ¿¹¸¦ º¸¶ó).
# demo_dynamic ÇÁ·Î±×·¥À» ¿ÀºêÁ§Æ® ÆÄÀÏ·Î ÄÄÆÄÀÏ.
gcc -Wall -g -c demo_dynamic.c
# demo_use ÇÁ·Î±×·¥ÀÇ »ý¼º.
# ÀÌ ÇÁ·Î±×·¥ÀÌ »ç¿ëÇϴ ƯÁ¤ÀÇ ¶óÀ̺귯¸®´Â ÇÁ·Î±×·¥ÀÌ
# ½ÃÀÛµÇ°í ³­µÚ°¡ µÇ±â Àü±îÁö´Â ÀûÀçµÇÁö ¾Ê±â ¶§¹®¿¡ µ¿Àû
# ¶óÀ̺귯¸®¸¦ ã±âÀ§ÇØ ¾îµð¸¦ °Ë»öÇØ¾ß ÇÏ´ÂÁö ¾Ë¸± Çʿ䰡
# ¾øÀ½¿¡ À¯ÀÇÇ϶ó.
# ±×·¸Áö¸¸ µ¿Àû ¶óÀ̺귯¸®¸¦ ÀûÀçÇÏ´Â ¶óÀ̺귯¸®¸¦ 
# Æ÷ÇÔÇϱâ À§Çؼ­ -ldl¿É¼ÇÀº ¹Ýµå½Ã ÇÊ¿äÇÏ´Ù.
gcc -g -o demo_dynamic demo_dynamic.o -ldl
# ÇÁ·Î±×·¥ÀÇ ½ÇÇà. LD_LIBRARY_PATH ¸¦ ÀÌ¿ëÇÏ¿©
# ÇÁ·Î±×·¥ÀÌ ¾îµð¼­ µ¿Àû ¶óÀ̺귯¸®¸¦ ¾òÀ»¼ö 
# ÀÖ´ÂÁö ¾Ë·Á ÁÖ¾î¾ß ÇÑ´Ù.
.
LD_LIBRARY_PATH="." ./demo_dynamic
</code>

<sect>  ´Ù¸¥ Âü°í ¹®Çå ¹× ¼Ò½º<p>
 ¶óÀ̺귯¸®¿¡ °üÇÑ Æ¯È÷ À¯¿ëÇÑ ¼Ò½º¿Í Á¤º¸°¡ ´ÙÀ½ÀÇ ¹®¼­¿¡ ÀÖ´Ù;
<itemize> 
<item> ``The GCC HOWTO'' -Daniel BarlowÀú. ƯÈ÷ ÀÌ  HOWTO ¹®¼­´Â 
¶óÀ̺귯¸®ÀÇ »ý¼º¿¡ ÇÊ¿äÇÑ ÄÄÆÄÀÏ·¯ ¿É¼Ç°ú  ¶óÀ̺귯¸®¿¡ ¾î¶»°Ô ÁúÀÇÇϴ°¡¿¡ 
°üÇØ¼­ Àß³íÀÇ µÇ°í ÀÖ´Ù. ÀÌ ¹®¼­´Â ¿©±â¼­ ´Ù·çÁö ¸øÇÑ ³»¿ëÀ» ´Ù·ç¾îÁÙ  °Í
ÀÌ¸ç ¿ªÀ¸·Î ±× ¹®¼­°¡ ´Ù·çÁö ¸øÇÑ ³»¿ëÀÌ ¿ª½Ã ¿©±â¿¡¼­ ¼Ò°³µÇ°í  ÀÖ´Â °Í
ÀÌ´Ù. ÀÌ HOWTO ¹®¼­´Â  Linux Documentation ProjectÀÇ  [20] 
<url url="http://www.linuxdoc.org" name="www.linuxdoc.org"> ¿¡¼­ ã¾Æº¼ ¼ö ÀÖ´Ù. 
 <item> Tool  Interface Standards  (TIS) committee(ÀÌ´Â  µ¿ÀÏÇÑ À§¿øÈ¸¿¡  ÀÇÇÑ  
Portable Formats Specification Version 1.1ÀÇ  ÇÑ  Chapter(Àå)ÀÌ´Ù.)¿¡  ÀÇÇÑ
``Executable and Linkable Format (ELF)''. À̰ÍÀº  ELF Æ÷¸Ë¿¡ °üÇÑ (GNU 
³ª ¸®´ª½º¿¡¸¸   ÇÑÁ¤µÇÁö ¾ÊÀº)ÀÚ¼¼ÇÑ  Á¤º¸µéÀ»  Á¦°øÇÑ´Ù. [21]
<url url="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ELF.doc.tar.gz" name="tsx-11.mit.edu/pub/linux/packages/GCC/ELF.doc.tar.gz"> À» º¸¸é µÈ´Ù. ÆÄÀÏÀ» MIT¿¡
¼­ ´Ù¿î¹ÞÀ¸¸é ºñÁ¤»óÀûÀÎ  Æ÷¸ËÀÏ °ÍÀÌ´Ù. gunzip,  tar·Î ǬµÚ¿¡ ``hps''¶ó´Â 
ÆÄÀÏÀ» ¾ò°Ô µÉ°ÍÀε¥ ù°ÁÙ°ú ¸Ç¸¶Áö¸·ÁÙÀ» ¾ø¾Ö°í ³ª¸é ÀμⰡ´ÉÇÑ Æ÷½ºÆ® 
½ºÅ©¸³Æ® ÆÄÀÏÀ» ¾òÀ»¼ö ÀÖÀ»°ÍÀÌ´Ù.

<item> ``ELF: From the Programmer's Perspective'' - Hongjui LuÁöÀ½. ÀÌ ¹®¼­
´Â ¸®´ª½º¿Í GNU gcc-specificÀÇ ELF¿¡  °üÇÑ Á¤º¸¸¦ Á¦°øÇÏ¸ç ¾òÀ»¼ö  ÀÖ´Â 
°÷Àº [22]<url url="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/elf.ps.gz" name="tsx-11.mit.edu/pub/linux/packages/GCC/elf.ps.gz">ÀÌ´Ù.
</itemize>
</p>

<sect>  ÀúÀ۱ǰú ¶óÀ̼¾½º<p>
 ÀúÀÛ±ÇÀº(C) David A.  Wheeler¿¡°Ô ÀÖÀ¸¸ç  GNU General  Public License 
(GPL)¸¦ Æ÷ÇÔÇÑ´Ù. ¾Æ¹«·± ´ë°¡¾øÀÌ Àç¹èÆ÷ ÇÒ¼ö ÀÖÀ¸¸ç ´ÙÀ½°ú °°Àº Ç׿¡ ÀÇ
°ÅÇÏ¿© Æ÷ÇÔµÈ ÅØ½ºÆ®¿Í ÇÁ·Î±×·¥À» ¹ø¿ª ¹× ÀÌ¿ëÇÒ¼ö ÀÖ´Ù.

 ÀÌ ÇÁ·Î±×·¥Àº ÀÚÀ¯ ¼ÒÇÁÆ®¿þ¾îÀÌ´Ù; Free Software Foundation¿¡ ÀÇÇØ¼­ Ãâ
ÆÇµÇ´Â GNU General Public License¿¡ ÀǰÅÇÏ¿© Àç¹èÆ÷ ¶Ç´Â  º¯°æÇÒ¼ö ÀÖ´Ù.
¹öÀü 2¶Ç´Â ±×ÀÌ»óµµ ¸¶Âù°¡ÁöÀÌ´Ù.  
 ÀÌ ¹®¼­´Â ±×°ÍÀÌ À¯¿ëÇÏ±æ ¹Ù¶ó¸ç ¹èÆ÷µÇ´Â °ÍÀÌÁö¸¸ ¾î¶°ÇÑ º¸ÁõÀº ¾ø´Ù´Â 
°Í¿¡ À¯ÀÇÇ϶ó. ƯÁ¤¸ñÀûÀ̳ª »ó¾÷ÀûÀÎ »ç¿ëÀ» À§ÇÑ ¾î¶² ¾Ï½ÃÀûÀÎ º¸Áõµµ  ¾ø
´Ù´Â °Í¿¡ À¯ÀÇÇÏ±æ ¹Ù¶ó¸ç ÀÌ¿¡ °üÇØ¼­´Â  GNU General Public License¿¡¼­ 
´õ ÀÚ¼¼È÷ º¸±æ ¹Ù¶õ´Ù.

 GNU General Public License¿Í  ÀÌ ÇÁ·Î±×·¥À» ÀÌ¹Ì  °¡Áö°í ÀÖÀ»ÅÙµ¥ ¸¸¾à 
±×·¸Áö ¸øÇÏ´Ù¸é Free  Software Foundation,  Inc., 59  Temple Place,  Suite 
330, Boston, MA 02111-1307  USA¿¡ ÆíÁöÇ϶ó.
  
 À§ ³»¿ëµéÀº ´Ù¸¥ À¥»çÀÌÆ®¿¡¼­ ¹Ì·¯¸µ ÇÒ¼ö ÀÖÀ¸¸ç ´Ù¸¸,    
<itemize>
<item> ¹Ì·¯ »çÀÌÆ®´Â ÁÖ »çÀÌÆ®°¡ °»½ÅµÇ¸é ÀÚµ¿À¸·Î °»½ÅµÉ¼ö ÀÖ¾î¾ß Çϸç,
<item> ÁÖ »çÀÌÆ®ÀÇ ÁÖ¼Ò(  [23]<url url="http://www.dwheeler.com/program-library" name="www.dwheeler.com/program-library">)¸¦ ºÐ¸í
È÷ ¸í½ÃÇØ¾ß Çϸç ÀÌ¿¡ ÇÏÀÌÆÛ ÅØ½ºÆ® ¸µÅ© µÇ¾î¾ß Çϸç,
<item> ³»°Ô(David A. Wheeler) ÀúÀÚ·Î½á °¡Á®¾ßÇÒ Á¢±Ù±ÇÀ» ÁÖ¾î¾ß ÇÑ´Ù.
</itemize>
 »óÀ§ÀÇ µÎ Ç׸ñÀº ³»°¡ ¾µ¸ð¾ø´Â  ¹ö±×¸®Æ÷Æ®¸¦ °è¼ÓÇØ¼­ ¹ÞÁö ¾Ê°Ô  ÇØÁØ´Ù. 
³ª´Â ´ç½ÅÀÇ À߸øµÈ ¹Ì·¯¸µÀ¸·Î  ÀÎÇØ 1³âÀü¿¡ °íÄ£ ¹ö±×ÀÇ  º¸°í¸¦ ¹ÞÁö¾Ê±æ 
¿øÇÑ´Ù. ÁÖ »çÀÌÆ®·Î ¸µÅ©ÇÔÀ¸·Î½á »ç¿ëÀÚ´Â ¹Ì·¯³»¿ëÀÌ ÃÖ½ÅÀÇ °ÍÀÎÁö ¾Ë  ¼ö 
ÀÖ´Ù. ³ª´Â ¸Å¿ì °­ÇÑ º¸¾ÈÀ» ÇÊ¿ä·Î ÇØ¼­ ÀϹÝÀûÀÎ ÀÎÅͳݿ¬°á Á¶Â÷ À§ÇèºÎ´ã
ÇÏÁö ¾Ê´Â »çÀÌÆ®µé¿¡¼­ ¹ß»ýµÇ´Â ¹®Á¦µé¿¡ ¸Å¿ì ¹Î°¨ÇÏ´Ù. ¸¸¾à ´ç½ÅÀÌ  ÀÌ·± 
Á¶°ÇÀ̶ó¸é Àû¾îµµ ´Ù¸¥  Æ÷ÀÎÆ®¸¦ ã¾Æ¼­ ÀÚÁÖ  ½º´ÏÄ¿³Ý ¾÷µ¥ÀÌÆ®(sneaknet 
update)Ç϶ó.
   
 ÀÌ ¶óÀ̼¾½º¿¡ ÀÇÇØ¼­ ´ç½ÅÀº ¹®¼­¸¦ º¯°æÇÒ¼ö ÀÖÁö¸¸  ´ç½ÅÀÌ ¾²Áö ¾ÊÀº ³»
¿ëÀ» ´ç½Å°ÍÀÌ¶ó´ø°¡ º¯°æµÈ ³»¿ëÀÌ ¿ø¹®°ú °°´Ù°í ¸»ÇÒ ¼ö´Â ¾ø´Ù. ¹®¼­¿¡ ´ë
ÇÑ º¯°æÀÌ Àüü ¹®¼­¿¡ ´ëÇÑ  ÀúÀÛ±ÇÀ» ÁÖ´Â °ÍÀÌ ¾Æ´Ï´Ù. ÀÌÀÏÀº  ÀúÀÛ¹ý¿¡¼­ 
¸»ÇÏ´Â, ÀúÀÛ±Ç ¼Ò½Ç·Î ÀÎÇÏ¿© ÀÚÀ¯·ÎÀÌ »ç¿ëÇÒ¼ö ÀÖ´Â ±×·± ¼º°ÝÀÇ ÀÛ¾÷ÀÌ ¾Æ
´Ï´Ù. ¹®¼­°¡ º¯°æµÇ¾úÀ» ¶§ ±×  ³»¿ë°ú ³¯Â¥¸¦ ºÐ¸íÈ÷ ¾Ë·Á¾ß ÇÑ´Ù´Â  ÀÚ¼¼ÇÑ  
ÀúÀ۱ǹýÀÇ ±ÔÄ¢À» »ìÆìº¸±æ ¹Ù¶õ´Ù. º¸ÅëÀÇ °æ¿ì º¯°æµÈ ³»¿ëÀ» ¹®¼­ÀÇ  ÅëÇÕ
±ÇÀÚ(David A. Wheeler)¿¡°Ô ¾Ë·Á ÅëÇÕ½ÃŰ´Â °ÍÀÌ ÁÁÀ» °ÍÀÌ´Ù.
</p>
  
<sect>ÁÖ¼®<p>
 <enum>
<item> 
file://localhost/export/sunsite/users/gferg/howto/00Program-Library-HOWTO.
html#AEN12
<item>  
file://localhost/export/sunsite/users/gferg/howto/00Program-Library-HOWTO.
html#AEN25
 <item>  
file://localhost/export/sunsite/users/gferg/howto/00Program-Library-HOWTO.
html#AEN33
<item>  
file://localhost/export/sunsite/users/gferg/howto/00Program-Library-HOWTO.
html#AEN126
 <item>  
file://localhost/export/sunsite/users/gferg/howto/00Program-Library-HOWTO.
html#AEN168
  <item>  
file://localhost/export/sunsite/users/gferg/howto/00Program-Library-HOWTO.
html#AEN189
  <item>  
file://localhost/export/sunsite/users/gferg/howto/00Program-Library-HOWTO.
html#AEN220
<item>  
file://localhost/export/sunsite/users/gferg/howto/00Program-Library-HOWTO.
html#AEN233
  <item>  <url url="http://www.gnu.org/software/libtool/libtool.html" name="http://www.gnu.org/software/libtool/libtool.html">
  <item>  
<url url="http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.ht
ml" name="developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.ht
ml">
 <item>  <url url="http://www.dwheeler.com/program-library" name="www.dwheeler.com/program-library">
  <item>  <url url="http://www.linuxdoc.org/" name="www.linuxdoc.org/">
  <item>  info:standards#Directory_Variables
 <item>  <url url="http://www.pathname.com/fhs" name="www.pathname.com/fhs">
 <item>  
<url url="http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.ht
ml" name="http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.ht
ml">
  <item>  <url url="http://www.gnu.org/software/libtool/libtool.html" name="www.gnu.org/software/libtool/libtool.html">
  <item>  info:binutils#nm
 <item> <url url=" http://www.gnu.org/software/libtool/libtool.html" name="www.gnu.org/software/libtool/libtool.html">
 <item>  <url url="http://www.gnu.org/software/libtool/manual.html" name="www.gnu.org/software/libtool/manual.html">
  <item> <url url="http://www.linuxdoc.org/" name="www.linuxdoc.org/">
 <item>  <url url="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ELF.doc.tar.gz" name="tsx-11.mit.edu/pub/linux/packages/GCC/ELF.doc.tar.gz">
 <item> <url url="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/elf.ps.gz" name="tsx-11.mit.edu/pub/linux/packages/GCC/elf.ps.gz">
 <item> <url url="http://www.dwheeler.com/program-library" name="www.dwheeler.com/program-library">
</enum> 
</p>
</article>


ID
Password
Join
The person you rejected yesterday could make you happy, if you say yes.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2005-07-07 17:40:33
Processing time 0.0079 sec