· 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>




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.0078 sec