<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.1//EN">
<!-- Linux Documentation Project trick - make the article's id "index" so
     the default HTML page is the title page: -->

<!--	CVS ¹öÀü Ç¥½ÃºÎºÐ ½ÃÀÛ					-->
<!-- $Id: Program-Library-HOWTO.sgml,v 1.3 2002/05/07 00:59:46 kss Exp $ -->
<!--	CVS ¹öÀü Ç¥½ÃºÎºÐ ³¡					-->

<article lang=ko>

<articleinfo>

<title>Program Library HOWTO</title>
<!--	±Û¾´ÀÌ¸¦ ±â·ÏÇÕ´Ï´Ù.	-->
<!--	½ºÆÐ¸Ó¿¡°Ô ³ëÃâµÇÁö ¾Ê±â À§ÇØ ÀÌ¸ÞÀÏ ÁÖ¼Ò´Â Á÷Á¢ ÀûÁö ¸¿½Ã´Ù.	-->
  <author>
     <firstname>David A.</firstname>
     <surname>Wheeler</surname>
     <affiliation>
        <address>
           <email>dwheeler (at) dwheeler.com</email>
        </address>
     </affiliation>
  </author>

<!--	¹ø¿ªÀÚ¸¦ ±â·ÏÇÕ´Ï´Ù. 					-->
  <othercredit role="translator">
     <firstname>»ó¹Î</firstname>
     <surname>¹Ú</surname>
     <affiliation>
        <address>
           <email>mskrap (at) kaist.ac.kr</email>
        </address>
     </affiliation>
  </othercredit>
<!--	°»½Å ³»¿ª	-->
   <revhistory>
      <revision>
         <revnumber>1.00</revnumber>
         <date>22 March 2002</date>
      </revision>
      <revision>
         <revnumber>0.60</revnumber>
         <date>2000-05</date>
         <authorinitials>È²ÁøÈñ</authorinitials>
         <revremark>
            ÃÖÃÊ ¹ø¿ª
         </revremark>
      </revision>
   </revhistory>
</articleinfo>

<abstract>
<para>
ÀÌ HOWTO¹®¼­´Â ÇÁ·Î±×·¡¸ÓµéÀÌ ¸®´ª½º »ó¿¡¼­ ¾î¶»°Ô ¶óÀÌºê·¯¸®¸¦ ¸¸µé°í »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇÑ ¹æ¹ýÀ» ³íÀÇÇÑ´Ù. ÀÌ ¹®¼­´Â Á¤Àû ¶óÀÌºê·¯¸®, °øÀ¯ ¶óÀÌºê·¯¸®, µ¿Àû ÀûÀç ¶óÀÌºê·¯¸®¸¦ ´Ù·é´Ù.
</para>
</abstract>

<sect1 id="introduction">
<title>¼Ò°³</title>
<para>
ÀÌ HOWTO¹®¼­´Â ÇÁ·Î±×·¡¸ÓµéÀÌ ¸®´ª½º »ó¿¡¼­ GNU ÇÁ·Î±×·¥À» »ç¿ëÇØ¼­ ¾î¶»°Ô ¶óÀÌºê·¯¸®¸¦ ¸¸µé°í »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇÑ ¹æ¹ýÀ» ³íÀÇÇÑ´Ù. ``ÇÁ·Î±×·¥ ¶óÀÌºê·¯¸®''´Â ³ªÁß¿¡ º» ÇÁ·Î±×·¥¿¡ ÅëÇÕµÉ ÄÄÆÄÀÏµÈ ÄÚµå(ÀÚ·á)¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â ÆÄÀÏÀÌ´Ù. ÇÁ·Î±×·¥ ¶óÀÌºê·¯¸®´Â ÇÁ·Î±×·¥ÀÌ ´õ ¸ðµâÈ­µÇ°í, ÄÄÆÄÀÏÇÏ±â ºü¸£°Ô ÇÏ°í, ¾÷µ¥ÀÌÆ® ÇÏ±â ½±°Ô ¸¸µé¾îÁØ´Ù. ÇÁ·Î±×·¥ ¶óÀÌºê·¯¸®´Â 3°¡Áö Å¸ÀÔÀ¸·Î ³ª´­¼ö ÀÖ´Ù:
Á¤Àû ¶óÀÌºê·¯¸®(static library), °øÀ¯ ¶óÀÌºê·¯¸®(shared library), µ¿Àû ÀûÀç(DL)¶óÀÌºê·¯¸®(dynamically loaded library)
</para>

<para>
ÀÌ ¹®¼­´Â Ã³À½À¸·Î ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ±â Àü¿¡ ½ÇÇà°¡´ÉÇÑ ÇÁ·Î±×·¥À¸·Î ¼³Ä¡µÇ´Â Á¤Àû ¶óÀÌºê·¯¸®¿¡ ´ëÇØ¼­ ³íÀÇÇÏ°Ú´Ù. ±×¸®°í ³ª¼­, ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§ ÀûÀçµÇ°í, ÇÁ·Î±×·¥»çÀÌ¿¡ °øÀ¯°¡ °¡´ÉÇÑ °øÀ¯ ¶óÀÌºê·¯¸®¿¡ ´ëÇØ¼­ ³íÀÇÇÑ´Ù. ¸¶Áö¸·À¸·Î, ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ¶§ ¾ðÁ¦µçÁö ÀûÀçµÇ°í »ç¿ëµÉ ¼ö ÀÖ´Â µ¿Àû ÀûÀç ¶óÀÌºê·¯¸®¿¡ ´ëÇØ¼­ ³íÀÇÇÑ´Ù. µ¿ÀûÀûÀç(DL) ¶óÀÌºê·¯¸®´Â ´Ù¸¥ ¹æ½ÄÀÇ ¶óÀÌºê·¯¸® Çü½Ä(format)°ú ´Ù¸£Áö ¾Ê´Ù. (Á¤Àû, °øÀ¯ ¶óÀÌºê·¯¸®µµ DL ¶óÀÌºê·¯¸®·Î »ç¿ëµÉ ¼ö ÀÖ´Ù); ±× ´ë½Å¿¡, DL ¶óÀÌºê·¯¸®´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô »ç¿ëµÇ´Â ¹æ¹ý¿¡ ÀÇÇØ Â÷ÀÌ°¡ ÀÖ´Ù. ÀÌ HOWTO ¹®¼­´Â ´õ ¸¹Àº ¿¹Á¦°¡ ÀÖ´Â ´Ü¶ô, ´õ ¸¹Àº ¼Ò½ºÀÇ Âü°íÀÚ·á°¡ ÀÖ´Â ´Ü¶ôÀ» Æ÷ÇÔÇÑ´Ù.
</para>

<para>
¶óÀÌºê·¯¸®¸¦ °³¹ßÇÏ°í ÀÖ´Â °³¹ßÀÚµéÀº °øÀ¯ ¶óÀÌºê·¯¸®·Î ¸¸µé¾î¾ß ÇÑ´Ù. ¿Ö³ÄÇÏ¸é, °øÀ¯¶óÀÌºê·¯¸®´Â ±× ¶óÀÌºê·¯¸®¸¦ »ç¿ëÇÏ°í ÀÖ´Â ÀÀ¿ë ÇÁ·Î±×·¥À¸·ÎºÎÅÍ ¶óÀÌºê·¯¸®¸¦ °³º°ÀûÀ¸·Î ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ÀÖ±â ¶§¹®ÀÌ´Ù. µ¿Àû ÀûÀç(DL) ¶óÀÌºê·¯¸®´Â À¯¿ëÇÏ´Ù. ÇÏÁö¸¸, »ç¿ëÇÏ±â À§ÇØ ´õ ¸¹Àº ·®ÀÇ ÀÛ¾÷À» ÇÊ¿äÇÏ°í ¸¹Àº ÇÁ·Î±×·¥µéÀÌ ÀÌ ¶óÀÌºê·¯¸®°¡ Á¦°øÇÏ´Â À¯¿¬¼ºÀ» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù. ¹Ý´ë·Î, Á¤Àû ¶óÀÌºê·¯¸®´Â ¶óÀÌºê·¯¸®¸¦ ¾÷µ¥ÀÌÆ® ÇÏ´Â°ÍÀÌ ´õ ¾î·Æ±â ¶§¹®¿¡ ÀÏ¹ÝÀûÀÎ ¸ñÀûÀ¸·Î »ç¿ëµÇ´Â ÇÁ·Î±×·¥¿¡´Â ÃßÃµÇÏ±â Èûµé´Ù. ±×·¡µµ, °¢°¢Àº ±×µéÀÇ ÀåÁ¡À» °¡Áö°í ÀÖ°í, °¢°¢ÀÇ Å¸ÀÔ¿¡ ´ëÇÑ ÀåÁ¡Àº ±× Å¸ÀÔÀ» ¼³¸íÇÏ´Â ¼½¼Çµé¿¡¼­ ³íÀÇµÉ °ÍÀÌ´Ù.
</para>

<para>
°øÀ¯ ¶óÀÌºê·¯¸®¸¦ DLL(Dynamic Linked Library)¶ó°í ÇÏ°Å³ª, DL¶óÀÌºê·¯¸®·Î »ç¿ëµÇ´Â ¶óÀÌºê·¯¸®¿¡ ´ëÇØ DLLÀÌ¶ó°í ÇÏ°Å³ª, À§ÀÇ µÎ°¡Áö »óÈ²¿¡ ¸Â´Â ¶óÀÌºê·¯¸®¸¦ DLLÀÌ¶ó°í ÇÏ´Â °ÍÀº ÀÇ¹Ì ¾ø´Â ÀÏÀÌ´Ù. ´ç½ÅÀÌ À§ÀÇ °ÍµéÁß ¾î´À ÀÇ¹Ì¸¦ °í¸£´õ¶ó°í, ÀÌ HOWTO ¹®¼­´Â ¸®´ª½º »ó¿¡¼­ µ¹¾Æ°¡´Â DLLs¸¦ ´Ù·ê °ÍÀÌ´Ù.
</para>

<para>
ÀÌ HOWTO¹®¼­´Â ¿À´Ã³¯ ´ëºÎºÐÀÇ ¸®´ª½º ¹èÆ÷ÆÇ¿¡¼­ »ç¿ëµÇ´Â Çü½ÄÀÎ ½ÇÇà, ¿¬°á Çü½Ä(ELF : Executable and Linking Format)¿¡ ´ëÇØ¼­ ´Ù·ê°ÍÀÌ´Ù. GNU gcc´Â »ç½Ç ELFÀÌ¿Ü¿¡ ´õ ¸¹Àº ¶óÀÌºê·¯¸®¸¦ ´Ù·é´Ù; Æ¯º°È÷, ´ëºÎºÐÀÇ ¸®´ª½º ¹èÆ÷ÆÇÀº ¾ÆÁ÷±îÁöµµ Åð»öÇÑ a.outÇü½ÄÀ» »ç¿ëÇÑ´Ù. ±×·¯³ª, ±× Çü½ÄÀº ÀÌ ¹®¼­ÀÇ ¹üÀ§¸¦ ¹þ¾î³­´Ù.
</para>

<para>
¸¸¾à ´ç½ÅÀÌ ÇÁ·Î±×·¥À» ¸¹Àº ½Ã½ºÅÛ¿¡ Æ÷ÆÃÇÒ°ÍÀÌ¶ó¸é, ¶óÀÌºê·¯¸®¸¦ ¼³Ä¡ÇÏ°í ¸¸µé±â À§ÇØ¼­ ¸®´ª½º ÅøÀ» Á÷Á¢ »ç¿ëÇÏ±âº¸´Ù <ulink url="http://www.gnu.org/software/libtool/libtool.html">GNU libtool</ulink>À» »ç¿ëÇÏ´Â °ÍÀ» °í·ÁÇÏ¶ó. GNU libtoolÀº ÀÏ°üµÇ°í, Æ÷ÆÃ°¡´ÉÇÑ ÀÎÅÍÆäÀÌ½º¼Ó¿¡ °øÀ¯¶óÀÌºê·¯¸®ÀÇ º¹Àâ¼ºÀ» ¼û±â´Â ¿ªÇÒ(¿¹¸¦µé¾î, ¶óÀÌºê·¯¸®¸¦ ¸¸µé°í ¼³Ä¡ÇÏ´Â °Í)À» Áö¿øÇÏ´Â ÀÏ¹ÝÀûÀÎ ¶óÀÌºê·¯¸® Áö¿ø ½ºÅ©¸³Æ®ÀÌ´Ù. µ¿Àû ÀûÀç ¶óÀÌºê·¯¸®¸¦ À§ÇÑ Æ÷ÆÃ ÀÎÅÍÆäÀÌ½º¸¦ »ç¿ëÇÏ±âÀ§ÇØ, ´ç½ÅÀº ¸¹Àº Æ÷ÆÃ ÅøÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. GNU libtoolÀº ``libltdl''ÀÌ¶ó´Â ÅøÀ» Æ÷ÇÔÇÑ´Ù. ±×¿Ü¿¡µµ, ´ç½ÅÀº ¸ðµâÀÇ µ¿Àû ÀûÀç¸¦ Áö¿øÇÏ´Â glib¶óÀÌºê·¯¸®(glibc¿Í È¥µ¿ÇÏÁö¸¶¶ó)¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. glib¿¡ ´ëÇØ¼­´Â <ulink url="http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.html">http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.html</ulink>¿¡¼­ ´õ ¸¹ÀÌ Ã£¾Æ º¼ ¼ö ÀÖ´Ù. ´Ù½ÃÇÑ¹ø ¸»ÇÏÁö¸¸, ¸®´ª½º¿¡¼­´Â ÀÌ·± ±â´ÉÀº ÀÌ HOWTO¿¡ ±â¼úµÈ ±¸¼º°³³äÀ¸·Î ±¸Çö µÉ ¼ö ÀÖ´Ù. ¸¸¾à ´ç½ÅÀÌ ¸®´ª½º¿¡¼­ ÄÚµå¸¦ °³¹ßÇÏ°Å³ª µð¹ö±ë ÇÏ°í ÀÖ´Ù¸é, ´ç½ÅÀº ÀÌ HOWTOÀÇ Á¤º¸¸¦ ¿øÇÏ°í ÀÖÀ» °ÍÀÌ´Ù.
</para>

<para>
ÀÌ HOWTOÀÇ º»·¡ÀÇ À§Ä¡´Â <ulink url="http://www.dwheeler.com/program-library">http://www.dwheeler.com/program-library</ulink>ÀÌ°í,  Linux Documentation Project (<ulink url="http://www.linuxdoc.org">http://www.linuxdoc.org</ulink>)¿¡ ¿Ã¶ó°¡ ÀÖ´Ù. ÀúÀÛ±Ç(Copyright)´Â Copyright (C) 2000 David A. WheelerÀÌ°í, GPL ¶óÀÌ¼¾½º¸¦ µû¸¥´Ù; ´õ ¸¹Àº Á¤º¸¸¦ À§ÇØ¼­ ¸¶Áö¸· ¼½¼ÇÀ» Âü°íÇÏ¶ó.
</para>
</sect1>

<sect1 id="static-libraries">
<title>Á¤Àû ¶óÀÌºê·¯¸®</title>

<para>
Á¤Àû ¶óÀÌºê·¯¸®´Â ´Ü¼øÈ÷ º¸ÅëÀÇ ¸ñÀûÆÄÀÏ(object file)ÀÇ ¸ðÀ½ÀÌ´Ù. °ü·ÊÀûÀ¸·Î, Á¤Àû ¶óÀÌºê·¯¸®´Â ``.a''ÀÇ È®ÀåÀÚ·Î ³¡³­´Ù. ÀÌ°ÍÀº ar(archiver)ÇÁ·Î±×·¥¿¡ ÀÇÇØ¼­ ¸¸µé¾îÁø´Ù. Á¤Àû ¶óÀÌºê·¯¸®´Â ³ªÁß¿¡ ¼³¸íµÉ °øÀ¯ ¶óÀÌºê·¯¸®ÀÇ ÀÌÁ¡µé ¶§¹®¿¡ ¿¹Àü¸¸Å­ ¸¹ÀÌ ¾²ÀÌÁö´Â ¾Ê´Â´Ù. ÇÏÁö¸¸, ¾ÆÁ÷µµ ÀÌ°ÍµéÀº ¸¸µé¾îÁö°í, ¿ª»çÀûÀ¸·Î Ã³À½À¸·Î »ý°å°í, ¼³¸íÇÏ±â¿¡ ½±´Ù.
</para>

<para>
Á¤Àû ¶óÀÌºê·¯¸®´Â »ç¿ëÀÚµéÀÌ ÇÁ·Î±×·¥À» ´Ù½Ã ÄÄÆÄÀÏÇÏÁö ¾Ê¾Æµµ ¸µÅ©½ÃÅ³¼ö ÀÖµµ·Ï ÇØÁÖ±â ¶§¹®¿¡, ÄÄÆÄÀÏ ½Ã°£À» ÁÙ¿©ÁØ´Ù. ¿À´Ã³¯ÀÇ ºü¸¥ ÄÄÆÄÀÏ·¯¸¦ º¸¸é Àç ÄÄÆÄÀÏ ½Ã°£Àº ±×´ÙÁö Áß¿äÇÑ ¿ä¼Ò°¡ ¾Æ´Ï±â ¶§¹®¿¡, ÀÌ°ÍÀº ¿¹Àü¸¸Å­ ÀÌÁ¡ÀÌ µÇÁö ¸øÇÑ´Ù. Á¤Àû ¶óÀÌºê·¯¸®´Â ÇÁ·Î±×·¡¸ÓµéÀÌ ¶óÀÌºê·¯¸®¸¦ ¸µÅ©ÇÏ°Ô´Â Çã¶ôÇÏ°í ½ÍÀºµ¥, ¼Ò½ºÄÚµå¸¦ °ø°³ÇÏ°í ½ÍÁö ¾ÊÀ» ¶§¿¡ À¯¿ëÇÏ´Ù(ÀÌ°ÍÀº ¶óÀÌºê·¯¸® ÆÇ¸ÅÀÚ¿¡°Ô À¯¿ëÇÒ ¼ö ÀÖ°ÚÁö¸¸, ÀÌ ¶óÀÌºê·¯¸®¸¦ »ç¿ëÇÏ·Á´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô´Â ÀÌÁ¡ÀÌ ¾Æ´Ï´Ù). ÀÌ·ÐÀûÀ¸·Î, ½ÇÇàÈ­ÀÏ¿¡ ¸µÅ©µÇ´Â Á¤Àû ELF¶óÀÌºê·¯¸® ÄÚµå´Â °øÀ¯ ¶óÀÌºê·¯¸®³ª µ¿Àû ÀûÀç ¶óÀÌºê·¯¸®º¸´Ù 1-5%Á¤µµ ºü¸£°Ô µ¿ÀÛÇØ¾ß ÇÑ´Ù. ÇÏÁö¸¸, ½ÇÀçÀûÀ¸·Î ´Ù¸¥ ¸î¸î ¿ä¼Òµé ¶§¹®¿¡ ÀÌ·± Çö»óÀº °ÅÀÇ ³ªÅ¸³ªÁö ¾Ê°Ô µÈ´Ù.
</para>

<para>
Á¤Àû ¶óÀÌºê·¯¸®¸¦ ¸¸µé°Å³ª, Á¸ÀçÇÏ´Â µ¿Àû ¶óÀÌºê·¯¸®¿¡ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» Ãß°¡ÇÏ±â À§ÇØ¼­ ´ÙÀ½°ú °°Àº ¸í·ÉÀ» »ç¿ëÇÏ¶ó:
</para>

<programlisting>
ar rcs my_library.a file1.o file2.o
</programlisting>

<para>
ÀÌ ¿¹Á¦ ¸í·ÉÀº ¿ÀºêÁ§Æ® ÆÄÀÏ file1.o, file2.o¸¦ Á¤Àû ¶óÀÌºê·¯¸® my_library.a¿¡ Ãß°¡ÇÏ°í, ¸¸¾à my_library.a°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é ¸¸µå´Â °ÍÀÌ´Ù. Á¤Àû ¶óÀÌºê·¯¸®¸¦ ¸¸µå´Â °Í¿¡ ´ëÇØ ´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é ar(1)À» ÂüÁ¶ÇÏ¶ó.
</para>

<para>
´ç½ÅÀÌ Á¤Àû ¶óÀÌºê·¯¸®¸¦ ¸¸µé¾ú´Ù¸é, ±×°ÍÀ» »ç¿ëÇÏ°í ½Í¾î ÇÒ °ÍÀÌ´Ù. ´ç½ÅÀº ½ÇÇàÈ­ÀÏÀ» ¸¸µé¶§, ÄÄÆÄÀÏ, ¸µÅ© °úÁ¤¿¡¼­ Á¤Àû ¶óÀÌºê·¯¸®¸¦ ºÎ¸¦ ¼ö ÀÖ´Ù. ¸¸¾à ½ÇÇàÈ­ÀÏÀ» ¸¸µé±â À§ÇØ gcc(1)À» »ç¿ëÇÑ´Ù¸é, ¶óÀÌºê·¯¸®¸¦ Ç¥½ÃÇÏ±â À§ÇØ -l ¿É¼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù; ´õ ¸¹Àº Á¤º¸¸¦ À§ÇØ gcc¸¦ Ã£¾Æº¸¶ó. ¶ÇÇÑ, -l, -LµîÀÇ ¿É¼ÇÀ» Áö¿øÇÏ´Â ld(1) ¸µÄ¿¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù; ±×·¯³ª, ´ëºÎºÐÀÇ °æ¿ì ld(1)À» »ç¿ëÇÏ´Â °Íº¸´Ù gcc(1)À» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ld(1)ÀÌ ´õ ¸¹ÀÌ ¹Ù²î±â ¶§¹®ÀÌ´Ù.
</para>
</sect1>






<sect1 id="shared-libraries">
<title>°øÀ¯ ¶óÀÌºê·¯¸®</title>

<para>
°øÀ¯ ¶óÀÌºê·¯¸®´Â ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§ ÀûÀçµÇ´Â ¶óÀÌºê·¯¸®ÀÌ´Ù. °øÀ¯ ¶óÀÌºê·¯¸®°¡ Á¦´ë·Î ¼³Ä¡µÈ´Ù¸é, ±×´ÙÀ½¿¡ ½ÃÀÛÇÏ´Â ¸ðµç ÇÁ·Î±×·¥Àº ÀÚµ¿ÀûÀ¸·Î »õ °øÀ¯ ¶óÀÌºê·¯¸®¸¦ »ç¿ëÇÑ´Ù. ÀÌ°ÍÀº ÈÎ¾À ´õ À¯¿¬¼º ÀÖ°í, ¹ßÀüµÈ°ÍÀÌ´Ù. ¿Ö³ÄÇÏ¸é, ¸®´ª½º¿¡¼­ »ç¿ëÇÏ´Â ¹æ¹ýÀº ´ç½Å¿¡°Ô ´ÙÀ½°ú °°Àº °ÍµéÀ» Çã¿ëÇÏ±â ¶§¹®ÀÌ´Ù:
<itemizedlist>
<listitem>
    <para>
    ¶óÀÌºê·¯¸®¸¦ ¾÷µ¥ÀÌÆ®ÇØµµ ÇÁ·Î±×·¥ÀÌ ¿¹Àü ¹öÀüÀÇ ¶óÀÌºê·¯¸®¸¦ »ç¿ëÇÒ¼ö ÀÖµµ·Ï Áö¿øÇÑ´Ù.
    </para>
</listitem>
<listitem>
    <para>
    ¾î¶² Æ¯Á¤ÇÑ ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ³¶§, ¶óÀÌºê·¯¸® ³»ÀÇ Æ¯Á¤ÇÑ ¶óÀÌºê·¯¸®³ª ÇÔ¼ö¸¦ ¿À¹ö¶óÀÌµå ÇÒ ¼ö ÀÖ´Ù.
    </para>
</listitem>
<listitem>
    <para>
    ÀÌ ¸ðµç°ÍµéÀ» Á¸ÀçÇÏ°íÀÖ´Â ¶óÀÌºê·¯¸®¿¡¼­ ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ´Â µ¿¾È¿¡ °¡´ÉÇÏ´Ù.
    </para>
</listitem>
</itemizedlist>
</para>

<sect2>
<title>°ü·Êµé(Conventions)</title>
<para>
ÀÌ ¿øÇÏ´Â ¸ðµç ±â´ÉÀ» Áö¿øÇÏ´Â °øÀ¯ ¶óÀÌºê·¯¸®¿¡ ´ëÇØ, ¸¹Àº °ü·Ê¿Í ÁöÄ§ÀÌ µû¶óÁÖ¾î¾ß ÇÑ´Ù. ´ç½ÅÀº ¶óÀÌºê·¯¸®ÀÇ ÀÌ¸§ÀÇ Â÷ÀÌ¸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. Æ¯º°È÷, ºÒ¸®´Â ÀÌ¸§``soname''°ú ½ÇÁ¦ÀÌ¸§``real name''¿¡ ´ëÇØ¼­ ¾Ë¾Æ¾ß ÇÑ´Ù(±×¸®°í ÀÌ°ÍµéÀÌ ¾î¶»°Ô »óÈ£ÀÛ¿ëÇÏ´ÂÁö¸¦). ´ç½ÅÀº ¶ÇÇÑ ÀÌ°ÍµéÀÌ ÆÄÀÏ½Ã½ºÅÛÀÇ ¾î´ÀºÎºÐ¿¡ À§Ä¡ÇÏ´ÂÁö ¾Ë¾Æ¾ß ÇÑ´Ù.
</para>

<sect3>
<title>°øÀ¯ ¶óÀÌºê·¯¸® ÀÌ¸§µé</title>
<para>
¸ðµç °øÀ¯ ¶óÀÌºê·¯¸®µéÀº ``ºÒ¸®´Â ÀÌ¸§''ÀÌ¶ó ºÒ¸®´Â Æ¯º°ÇÑ ÀÌ¸§À» °¡Áö°í ÀÖ´Ù. ±× ºÒ¸®´Â ÀÌ¸§Àº Á¢µÎ»ç ``lib'', ±× ¶óÀÌºê·¯¸® ÀÌ¸§, ``.so''¿Í ÀÎÅÍÆäÀÌ½º°¡ ¹Ù²ñ¿¡ µû¶ó Áõ°¡µÇ´Â ±â°£°ú ¹öÀü³Ñ¹ö·Î ÀÌ·ç¾îÁø´Ù(Æ¯º° ÄÉÀÌ½º·Î, Àú ¼öÁØÀÇ C¶óÀÌºê·¯¸®´Â ``lib''À¸·Î ÀÌ¸§ÀÌ ½ÃÀÛÇÏÁö ¾Ê´Â´Ù). ÃæºÐÈ÷ °ËÁõ¹ÞÀº(fully-qualified) ºÒ¸®´Â ÀÌ¸§Àº ±× ¶óÀÌºê·¯¸®°¡ ¼ÓÇØÀÖ´Â µð·ºÅä¸®¸¦ Á¢µÎ»ç·Î ÇÑ´Ù; ½ÇÁ¦ ½Ã½ºÅÛ¿¡¼­ ÃæºÐÈ÷ °ËÁõ¹ÞÀº ºÒ¸®´Â ÀÌ¸§Àº ``½ÇÁ¦ÀÌ¸§''ÀÇ ½Éº¼¸¯ ¸µÅ©°¡ µÈ´Ù.
</para>

<para>
¸ðµç °øÀ¯ ¶óÀÌºê·¯¸®µéÀº ``½ÇÁ¦ÀÌ¸§''ÀÌ¶ó ºÒ¸®´Â ½ÇÁ¦ ¶óÀÌºê·¯¸® ÄÚµå¸¦ Æ÷ÇÔÇÏ´Â ÆÄÀÏÀÌ¸§À» °¡Áö°í ÀÖ´Ù. ½ÇÁ¦ ÀÌ¸§Àº ºÒ¸®´Â ÀÌ¸§¿¡´Ù°¡ ±â°£, ¸¶ÀÌ³Ê ¼ýÀÚ, ¶Ç´Ù¸¥ ±â°£, Ãâ½Ã ¼ýÀÚ¸¦ Æ÷ÇÔÇÑ´Ù. ¸¶Áö¸·ÀÇ ±â°£°ú Ãâ½Ã ¼ýÀÚ´Â ¿É¼ÇÀÌ´Ù. ¸¶ÀÌ³Ê ¼ýÀÚ¿Í Ãâ½Ã ¼ýÀÚ´Â ´ç½ÅÀÌ ¶óÀÌºê·¯¸®ÀÇ ¾î¶² ¹öÀüÀ» ¾²°í ÀÖ´ÂÁö Á¤È®ÇÏ°Ô ¾Ë°Ô ÇÔÀ¸·Î¼­ Çü»ó°ü¸®¸¦ ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù. ÀÌ ¼ýÀÚµéÀÌ »ç¿ëÀ» ½±°Ô ÇÑ´Ù ÇÏ´õ¶óµµ, ¶óÀÌºê·¯¸® ¹®¼­¿¡ ¾²ÀÎ°Í°ú °°Àº ¼ýÀÚ°¡ ¾Æ´Ò ¼ö ÀÖ´Ù´Â Á¡¿¡ À¯ÀÇÇÏ¶ó.
</para>

<para>
°Ô´Ù°¡, ÄÄÆÄÀÏ·¯°¡ ¶óÀÌºê·¯¸®¸¦ ¿ä±¸ÇÒ ¶§ »ç¿ëÇÏ´Â ´Ù¸¥ ÀÌ¸§ÀÌ ÀÖ´Ù(³ª´Â ±×°ÍÀ» ``¸µÅ© ÀÌ¸§(linker name)''ÀÌ¶ó ¸íÄªÇÒ °ÍÀÌ´Ù). ±×°ÍÀº ´ÜÁö ºÒ¸®´Â ÀÌ¸§¿¡¼­ ¼ýÀÚ¸¦ ¾ø¾Ø ÀÌ¸§ÀÌ´Ù.
</para>

<para>
°øÀ¯ ¶óÀÌºê·¯¸®¸¦ ´Ù·ç´Â ¹æ¹ýÀº ÀÌ ÀÌ¸§µéÀÇ ±¸ºÐÀ» ÇÏ´Â °ÍÀÌ´Ù. ÇÁ·Î±×·¥ÀÌ ±×µéÀÌ ¿øÇÏ´Â °øÀ¯ ¶óÀÌºê·¯¸®¸¦ ³»ºÎÀûÀ¸·Î ³ª¿­ÇÑ´Ù¸é ±×°ÍµéÀº ±× ¶óÀÌºê·¯¸®µéÀÇ ºÒ¸®´Â ÀÌ¸§¸¸ ³ª¿­ÇØ¾ß ÇÑ´Ù. ¹Ý´ë·Î, ´ç½ÅÀÌ °øÀ¯ ¶óÀÌºê·¯¸®¸¦ ¸¸µç´Ù¸é, ´ç½ÅÀº ±× ¶óÀÌºê·¯¸®¸¦ Æ¯Á¤ÇÑ ÆÄÀÏÀÌ¸§À¸·Î ¸¸µé¾î¾ß ÇÑ´Ù(´õ ÀÚ¼¼ÇÑ ¹öÀü Á¤º¸µé°ú ÇÔ²²). ´ç½ÅÀÌ »õ·Î¿î ¹öÀüÀÇ ¶óÀÌºê·¯¸®¸¦ ¼³Ä¡ÇÑ´Ù¸é, ´ç½ÅÀº ±×°ÍÀ» »õ·Î¿î Æ¯º°ÇÑ µð·ºÅä¸®¿¡´Ù ¼³Ä¡ÇÏ°í ldconfig(8)À» »ç¿ëÇØ¼­ ÇÁ·Î±×·¥À» µ¹¸°´Ù. ldconfigÀº Á¸ÀçÇÏ´Â ÆÄÀÏÀ» Á¶»çÇÏ°í, /etc/ld.so.cacheÀÇ Ä³½Ã ÆÄÀÏÀ» ¼³Á¤ÇÏ¸é¼­(Àá½ÃÈÄ¿¡ ¾ð±Þ µÉ °ÍÀÌ´Ù) ½ÇÁ¦ ÀÌ¸§¿¡´Ù°¡ ºÒ¸®´Â ÀÌ¸§À¸·Î ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µé¾îÁØ´Ù. 
</para>

<para>
ldconfig´Â ¸µÄ¿ ÀÌ¸§À» ¸¸µéÁö´Â ¾Ê´Â´Ù; º¸Åë ÀÌ°ÍÀº ¶óÀÌºê·¯¸® ¼³Ä¡ÇÒ¶§ ¸¸µé¾îÁö°í, ¸µÄ¿ ÀÌ¸§Àº ``°¡ÀåÃÖ±ÙÀÇ'' ºÒ¸®´Â ÀÌ¸§ÀÌ³ª ½ÇÁ¦ ÀÌ¸§À¸·Î ¸¸µé¾îÁø´Ù. ³ª´Â ¸µÄ¿ ÀÌ¸§À» ºÒ¸®´Â ÀÌ¸§ÀÇ ½Éº¼¸¯ ¸µÅ©·Î »ç¿ëÇÒ °ÍÀ» ÃßÃµÇÑ´Ù. ¿Ö³ÄÇÏ¸é, ´ëºÎºÐÀÇ °æ¿ì ´ç½ÅÀÌ ¶óÀÌºê·¯¸®¸¦ ¾÷µ¥ÀÌÆ® ÇÑ´Ù¸é, ´ç½ÅÀº ¸µÅ© ½ÃÅ³¶§¿¡ ÀÚµ¿ÀûÀ¸·Î »ç¿ëÇÏ°í ½Í¾îÇÒ °ÍÀÌ±â ¶§¹®ÀÌ´Ù. ³ª´Â H. J. Lu¿¡°Ô ¿Ö ldconfig°¡ ÀÚµ¿ÀûÀ¸·Î ¸µÄ¿ÀÌ¸§À» ¸¸µé¾îÁÖÁö ¾Ê³Ä°í ¹°¾îº¸¾Ò´Ù. ±×ÀÇ ¼³¸íÀº ÀÌ·¸´Ù. ¾Æ¸¶ ´ç½ÅÀ» ÃÖ½Å¹öÀüÀÇ ¶óÀÌºê·¯¸® ÄÚµå¸¦ µ¹¸®°í ½Í¾îÇÒÁö ¸ð¸¥´Ù. ÇÏÁö¸¸, ±× ´ë½Å¿¡ ¿¹ÀüÀÇ(¾Æ¸¶µµ È£È¯µÇÁö ¾Ê´Â) ¹öÀüÀÇ ¶óÀÌºê·¯¸®·Î <emphasis>°³¹ß</emphasis>ÇÏ°í ½Í¾îÇÒ ¼ö µµ ÀÖ´Ù. µû¶ó¼­, ldconfig´Â ÇÁ·Î±×·¥ÀÌ ¾î¶² ¶óÀÌºê·¯¸®¸¦ »ç¿ëÇÒ °ÍÀÎÁö ¾î¶² °¡Á¤µµ ÇÏ°í ÀÖÁö ¾Ê´Ù. µû¶ó¼­, ¼³Ä¡ÀÚ´Â ¸µÄ¿°¡ ¾î¶² ¶óÀÌºê·¯¸®¸¦ »ç¿ëÇÒ°ÍÀÌÁö¿¡ ´ëÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ Æ¯º°È÷ ¼öÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù.
<!-- Private correspondance, 10-April-2000 -->
</para>

<para>
µû¶ó¼­, <filename>/usr/lib/libreadline.so.3</filename>´Â <filename>/usr/lib/libreadline.so.3.0</filename>°ú °°Àº ½ÇÁ¦ ÀÌ¸§¿¡ ldconfig¿¡ ÀÇÇØ ½Éº¼¸¯ ¸µÅ©°¡ µÈ ÃæºÐÈ÷ °ËÁõ¹ÞÀº ºÒ¸®´Â ÀÌ¸§ÀÌ´Ù. <filename>/usr/lib/libreadline.so.3</filename>À» ½Éº¼¸¯ ¸µÅ©ÇÏ´Â <filename>/usr/lib/libreadline.so</filename> °°Àº ¸µÄ¿ ÀÌ¸§ÀÌ ÀÖÀ» ¼ö ÀÖ´Ù.
</para>




</sect3>

<sect3>
<title>ÆÄÀÏ ½Ã½ºÅÛ ¹èÄ¡</title>
<para>
°øÀ¯ ¶óÀÌºê·¯¸®´Â ÆÄÀÏ½Ã½ºÅÛÀÇ ¾îµò°¡¿¡ À§Ä¡ÇØ¾ß¸¸ ÇÑ´Ù. ´ëºÎºÐÀÇ ¿ÀÇÂ¼Ò½º ¼ÒÇÁÆ®¿þ¾î´Â GNUÇ¥ÁØÀ» µû¸¥´Ù; ´õ ¸¹Àº Á¤º¸¸¦ À§ÇØ¼­´Â <ulink url="info:standards#Directory_Variables"> info:standards#Directory_Variables</ulink>¸¦ Ã£¾Æº¸¾Æ¶ó. GNUÇ¥ÁØÀº ¼Ò½ºÄÚµå¸¦ ¹èÆ÷ÇÒ¶§ Ç¥ÁØÀ¸·Î ¸ðµç ¶óÀÌºê·¯¸®¸¦ /usr/local/lib¿¡ ¿Ã¸®±â¸¦ ÃßÃµÇÑ´Ù(±×¸®°í ¸ðµç ¸í·É¾î´Â /usr/local/bin¿¡ À§Ä¡ÇÏ±â¸¦ ÃßÃµÇÑ´Ù). ±×µéÀº ¶ÇÇÑ ÀÌ Ç¥ÁØÀ» ¿À¹ö¶óÀÌµåÇÏ°í, ÀÎ½ºÅç ¼ø¼­¸¦ Á¤ÇØÁÖ±âÀ§ÇÑ °ü·Ê¸¦ Á¤ÀÇÇÑ´Ù.
</para>

<para>
ÆÄÀÏ½Ã½ºÅÛ °èÃþ Ç¥ÁØ(FHS = Filesystem Hierarchy Standard)´Â ¹èÆ÷ÆÇÀÇ ¾îµð¿¡¼­ ¹«¾ùÀ» ÇØ¾ßÇÏ´ÂÁö ³íÀÇÇÑ´Ù(<ulink url="http://www.pathname.com/fhs">http://www.pathname.com/fhs</ulink>À» ÂüÁ¶ÇÏ¶ó). FHS¿¡ µû¸£¸é, ´ëºÎºÐÀÇ ¶óÀÌºê·¯¸®´Â /usr/lib¿¡ ÀÎ½ºÅç µÇ¾îÀÖ¾î¾ß¸¸ ÇÑ´Ù. ÇÏÁö¸¸, ½ÃÀÛ½Ã¿¡ ¿ä±¸µÇ´Â ¶óÀÌºê·¯¸®´Â /lib¿¡ ÀÖ¾î¾ß ÇÏ°í, ½Ã½ºÅÛÀÇ ÀÏºÎ°¡ ¾Æ´Ñ ¶óÀÌºê·¯¸®´Â /usr/local/lib¿¡ ÀÖ¾î¾ß ÇÑ´Ù.
</para>

<para>
À§ÀÇ µÎ ¹®¼­»çÀÌ¿¡ Á¤¸» Ãæµ¹ÀÌ ÀÖÁö´Â ¾Ê´Ù; GNUÇ¥ÁØÀº ¼Ò½ºÄÚµåÀÇ °³¹ßÀÚ¿¡°Ô ±âº»Àû°ÍµéÀ» ÃßÃµÇÑ´Ù. ¹Ý¸é¿¡, FHS´Â ¹èÆ÷ÀÚ(½Ã½ºÅÛ ÆÐÅ°Áö °ü¸® ½Ã½ºÅÛÀ» ÅëÇØ ¼Ò½ºÄÚµåÀÇ ±âº»ÀûÀÎ °ÍÀ» ¿À¹ö¶óÀÌµåÇÏ´Â »ç¶÷)¿¡°Ô ±âº»ÀûÀÎ°ÍÀ» ÃßÃµÇÑ´Ù. ÀÏ¹ÝÀûÀ¸·Î ÀÌ°ÍÀº Àß µ¹¾Æ°£´Ù: ``ÃÖ±ÙÀÇ''(¾Æ¸¶µµ ¹ö±×°¡ ÀÖÀ»Áöµµ ¸ð¸£´Â!) ¼Ò½ºÄÚµå´Â ´ç½ÅÀÌ ´Ù¿î·ÎµåÇØ¼­ ¼³Ä¡¸¦ ÇÏ¸é ``local''µð·ºÅä¸®(<filename>/usr/local</filename>)¿¡ ¼³Ä¡µÉ °ÍÀÌ°í, ±× ÄÚµå°¡ ÆÐÅ°Áö¸¦ ¹ßÀü½ÃÅ°¸é, °ü¸®ÀÚ´Â ¹èÆ÷ÆÇÀÇ Ç¥ÁØ À§Ä¡·Î ±× ÄÚµå¸¦ Ç¥ÁØÀ¸·Î À§Ä¡½ÃÅ³ ¼ö ÀÖ´Ù. ¸¸¾à ´ç½ÅÀÇ ¶óÀÌºê·¯¸®°¡ ¶óÀÌºê·¯¸®¸¦ ÅëÇØ È£ÃâµÇ´Â ÇÁ·Î±×·¥À» È£ÃâÇÑ´Ù¸é, ´ç½ÅÀ» ±×·± ÇÁ·Î±×·¥À» /usr/local/libexec¿¡ ³õ¾Æ¾ß ÇÑ´Ù(¹èÆ÷ÆÇ¿¡¼­´Â /usr/libexec°¡ µÈ´Ù). ÇÏ³ªÀÇ º¹ÀâÇÑ Á¡Àº, Red HatÁ¾·ùÀÇ ½Ã½ºÅÛÀº ¶óÀÌºê·¯¸®ÀÇ Å½»ö½Ã¿¡ /usr/local/libÀ» ±âº»À¸·Î Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù; ¾Æ·¡ÀÇ /etc/ld.so.conf¿¡ ´ëÇÑ ³íÀÇ¸¦ º¸¶ó. ´Ù¸¥ Ç¥ÁØ ¶óÀÌºê·¯¸® À§Ä¡´Â X-windows¸¦ À§ÇÑ /usr/X11R6/libÀ» Æ÷ÇÔÇÑ´Ù. /lib/security´Â PAM ¸ðµâÀ» À§ÇÑ°ÍÀÌÁö¸¸, ÀÌ°ÍµéÀº DL¶óÀÌºê·¯¸®·Î ÀûÀçµÈ´Ù´Â °ÍÀ» ¸í½ÉÇÏ¶ó(ÀÌ°Íµµ ¾Æ·¡¿¡¼­ ³íÀÇµÈ´Ù).
</para>
</sect3>
</sect2>

<sect2>
<title>¶óÀÌºê·¯¸® »ç¿ë ¹æ¹ýµé</title>
<para>
¸ðµç ¸®´ª½º ½Ã½ºÅÛÀ» Æ÷ÇÔÇÑ GNU glibc±â¹Ý ½Ã½ºÅÛ¿¡¼­´Â, ELF ¹ÙÀÌ³Ê¸® ½ÇÇàÆÄÀÏÀÇ ½ÃÀÛÀº ÇÁ·Î±×·¥·Î´õ°¡ ÀûÀçµÇ°í ½ÇÇàµÈ ÈÄ¿¡ ÇÑ´Ù. ¸®´ª½º ½Ã½ºÅÛ¿¡¼­´Â, ÀÌ ·Î´õ´Â /lib/ld-linux.so.X(¿©±â¼­ X´Â ¹öÀü ¼ýÀÚ)¶ó´Â ÀÌ¸§ÀÌ ºÙ´Â´Ù. ÀÌ ·Î´õ´Â ÇÁ·Î±×·¥¿¡¼­ ¾²ÀÌ´Â ´Ù¸¥ ¸ðµç °øÀ¯ ¶óÀÌºê·¯¸®¸¦ Ã£¾ÆÁÖ°í ÀûÀç½ÃÄÑÁØ´Ù.
</para>

<para>
Å½»öµÉ¶§ Ã£¾ÆÁö´Â µð·ºÅä¸®ÀÇ ¸®½ºÆ®´Â /etc/ld.so.conf¿¡ ÀúÀåµÈ´Ù. ¸¹Àº Red Hat±â¹Ý ¹èÆ÷ÆÇÀº ±âº»ÀûÀ¸·Î /usr/local/libÀ» /etc/ld.so.conf¿¡ ÀúÀåÇÏÁö ¾Ê´Â´Ù. ³ª´Â ÀÌ°ÍÀÌ ¹ö±×¶ó°í »ý°¢ÇÑ´Ù. µû¶ó¼­, Red Hat±â¹Ý ½Ã½ºÅÛ¿¡¼­ ¸¹Àº ÇÁ·Î±×·¥À» µ¹¸®±â À§ÇØ /etc/ld.so.conf¿¡ /usr/local/libÀ» Ãß°¡ÇÏ´Â°ÍÀº ¹ö±× ``ÇÈ½º''ÀÌ´Ù.
</para>

<para>
¶óÀÌºê·¯¸®¿¡ ¸î°³ÀÇ ÇÔ¼ö¸¦ Ãß°¡ÇÏ°í ½ÍÀºµ¥, ¶óÀÌºê·¯¸®ÀÇ ³ª¸ÓÁö ºÎºÐÀ» À¯ÁöÇÏ°í ½Í´Ù¸é, ¿À¹ö¶óÀÌµåÇÏ´Â ¶óÀÌºê·¯¸®ÀÇ ÀÌ¸§(.oÆÄÀÏ)À» /etc/ld.so.preload¿¡ ³Ö¾î¶ó; ÀÌ ``¹Ì¸® ÀûÀçµÇ´Â'' ¶óÀÌºê·¯¸®´Â ±âº» ¼Â¿¡ ´ëÇØ ¿ì¼±¼øÀ§¸¦ °¡Áú°ÍÀÌ´Ù. ÀÌ ¹Ì¸® ÀûÀçµÇ´Â ÆÄÀÏÀº ÀÏ¹ÝÀûÀ¸·Î ±ä±ÞÆÐÄ¡¿¡ »ç¿ëµÈ´Ù; ¹èÆ÷ÆÇÀº ÀÏ¹ÝÀûÀ¸·Î Ãâ½ÃµÉ¶§ ±×·±ÆÄÀÏµéÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù.
</para>

<para>
ÇÁ·Î±×·¥ ½ÃÀÛ½Ã¿¡ ÀÌ·± µð·ºÅä¸®¸¦ ´Ù Ã£´Â°ÍÀº ¸Å¿ì ºñÈ¿À²ÀûÀÎ ÀÏÀÌ´Ù. µû¶ó¼­, º¸Åë Ä³½Ì Á¤·ÄÀÌ »ç¿ëµÈ´Ù. ldconfig(8)Àº ±âº»À¸·Î /etc/ld.so.conf¸¦ ÀÐ°í µ¿Àû ¸µÅ© µð·ºÅä¸®µé(Ç¥ÁØ °ü·Ê¸¦µû¸£´Â)¿¡¼­ ÀûÀýÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µé°í, /etc/ld.so.cache¿¡ Ä³½Ã¸¦ ½á ³ÖÀ¸¸é, ´Ù¸¥ ÇÁ·Î±×·¥¿¡¼­ »ç¿ëµÈ´Ù. ÀÌ°ÍÀº ¶óÀÌºê·¯¸® Á¢±ÙÀÇ ¼Óµµ¸¦ ³ô¿©ÁØ´Ù. °ü·ÃµÈ°ÍÀº DLLÀÌ Ãß°¡µÇ°Å³ª »èÁ¦µÇ°Å³ª DLLµð·ºÅä¸®°¡ º¯ÇÒ¶§µµ ldconfigÀÌ ÀÛµ¿ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù; ldconfig¸¦ µ¿ÀÛ½ÃÅ°´Â °ÍÀº ¶óÀÌºê·¯¸®¸¦ ¼³Ä¡ÇÒ¶§ ÆÐÅ°Áö °ü¸®ÀÚ°¡ ¼öÇàÇØ¾ßÇÒ ÀÛ¾÷ Áß ÇÏ³ªÀÌ´Ù. ±×¸®°í³ª¼­, ½ÃÀÛ½Ã¿¡ µ¿Àû ·Î´õ°¡ /etc/ld.so.cache¸¦ »ç¿ëÇÏ°í ÇÊ¿äÇÑ ¶óÀÌºê·¯¸®¸¦ ·ÎµåÇÑ´Ù.
</para>

<para>
±×·±µ¥, FreeBSD´Â ÀÌ Ä³½Ã¸¦ À§ÇØ ´Ù¸¥ ÆÄÀÏÀÌ¸§À» »ç¿ëÇÑ´Ù. FreeBSD¿¡¼­´Â, ELF Ä³½Ã´Â /var/run/ld-elf.so.hintsÀÌ°í a.out Ä³½Ã´Â /var/run/ld.so.hintsÀÌ´Ù. ÀÌ°ÍµéÀº ldconfig(8)¿¡ ÀÇÇØ¼­ ¾÷µ¥ÀÌÆ®µÈ´Ù. µû¶ó¼­, ¸î¸î ´Ù¸¥ »óÈ²µé¿¡¼­¸¸ ÀÌ Àå¼ÒÀÇ Â÷ÀÌ°¡ ¹®Á¦°¡ µÈ´Ù.
<!-- Advanced Unix Programming by Warren W. Gay, Sams Publishing, 2000,
 Indianapolis, Indiana, page 258.  -->
</para>
</sect2>

<sect2>
<title>È¯°æ º¯¼öµé</title>
<para>
¿©·¯°¡Áö È¯°æº¯¼ö´Â ÀÌ °úÁ¤À» Á¦¾îÇÒ ¼ö ÀÖ´Ù. ±×¸®°í ÀÌ °úÁ¤À» ¿À¹ö¶óÀÌµåÇÏ´Â È¯°æº¯¼öµéÀÌ Á¸ÀçÇÑ´Ù.
</para>

<sect3>
<title>LD_LIBRARY_PATH</title>
<para>
ÀÌ Æ¯º°ÇÑ ½ÇÇàÀ» À§ÇØ ´ç½ÅÀº ÀÏ½ÃÀûÀ¸·Î ´Ù¸¥ ¶óÀÌºê·¯¸®¸¦ ´ëÃ¼ÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º¿¡¼­, È¯°æº¯¼ö LD_LIBRARY_PATH´Â Ç¥ÁØÀÇ µð·ºÅä¸®µéÀ» Ã£±âÀü¿¡ Ã£¾Æº¸°ÔµÇ´Â ¶óÀÌºê·¯¸®ÀÇ µð·ºÅä¸®µéÀÇ ÄÝ·ÐÀ¸·Î ±¸ºÐµÇ´Â ¼ÂÀÌ´Ù; ÀÌ°ÍÀº »õ ¶óÀÌºê·¯¸®³ª Æ¯º°È÷ Á¦ÀÛÇÑ Ç¥ÁØÀÌ ¾Æ´Ñ ¶óÀÌºê·¯¸®¸¦ µð¹ö±ëÇÒ¶§ À¯¿ëÇÏ´Ù. È¯°æº¯¼ö LD_PRELOAD´Â /etc/ld.so.preload°¡ ÇÏ´Â °ÍÃ³·³ Ç¥ÁØ ¼ÂÀ» ¿À¹ö¶óÀÌµåÇÏ´Â °øÀ¯ ¶óÀÌºê·¯¸®¸¦ ÇÔ¼ö¿Í ÇÔ²² ³ª¿­ÇÑ´Ù. ÀÌ°ÍµéÀº /lib/ld-linux.so¶ó´Â ·Î´õ¿¡ ÀÇÇØ ±¸ÇöµÈ´Ù. LD_LIBRARY_PATH°¡ ¸¹Àº À¯´Ð½º ½Ã½ºÅÛ¿¡¼­ ÀÛµ¿ÇÏ´Â ¹Ý¸é ¸ðµç ½Ã½ºÅÛ¿¡¼­ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ¸»ÇÏ°í ½Í´Ù; ¿¹¸¦µé¾î, HU-UX¿¡¼­´Â ÀÌ ±â´ÉÀÌ È¯°æº¯¼ö SHLIB_PATH¿¡ ÀÇÇØ¼­ °¡´ÉÇÏ°í, AIX¿¡¼­´Â LIBPATH¿¡ ÀÇÇØ °¡´ÉÇÏ´Ù(°°Àº ¹®¹ý°ú, ÄÝ·ÐÀ¸·Î ±¸ºÐµÇ´Â ¸®½ºÆ®·Î °¡´ÉÇÏ´Ù).
<!--  Source for the systems that don't use LD_LIBRARY_PATH:
      Drazen Kacar dave@srce.hr,  20 Jul 2000 13:27:53 +0200,
      Mailing list gnome-devel-list@gnome.org.
      Confirmed by "Advanced Unix Programming", page 259. -->
</para>

<para>
LD_LIBRARY_PATH´Â °³¹ß°ú °Ë»ç¸¦ À§ÇØ Æí¸®ÇÏ´Ù. ±×·¯³ª º¸ÅëÀÇ À¯ÀúÀÇ º¸ÅëÀÇ »ç¿ëÀ» À§ÇØ¼­ ¼³Ä¡ °úÁ¤¿¡¼­ º¯°æµÇ¸é ¾ÈµÈ´Ù; ¿Ö ±×·±Áö´Â <ulink url="http://www.visi.com/~barr/ldpath.html">http://www.visi.com/~barr/ldpath.html</ulink>ÀÇ ``Why LD_LIBRARY_PATH is Bad''¿¡¼­ Ã£¾Æº¸¶ó. ÇÏÁö¸¸, ÀÌ ±â´ÉÀº ¿©ÀüÈ÷ °³¹ß°ú °Ë»ç¸¦ À§ÇØ À¯¿ëÇÏ°í, ´Ù¸¥¹æ½ÄÀ¸·Î ÇØ°áÇÏÁö ¸øÇÏ´Â °ÍÀ» ÇØ°áÇÏ´Âµ¥ À¯¿ëÇÏ´Ù. ¸¸¾à ´ç½ÅÀÌ È¯°æº¯¼ö LD_LIBRARY_PATH¸¦ ¼³Á¤ÇÏ°í ½ÍÁö ¾Ê´Ù¸é, ¸®´ª½º¿¡¼­ ´ç½ÅÀº ÇÁ·Î±×·¥ ·Î´õ¸¦ Á÷Á¢ ºÒ·¯¼­ ÀÎÀÚ¸¦ ³Ñ°ÜÁÙ¼öµµ ÀÖ´Ù. ¿¹¸¦µé¾î, ´ÙÀ½Àº È¯°æº¯¼ö LD_LIBRARY_PATHÀÇ °æ·Î ÀÌ¿ÜÀÇ ÁÖ¾îÁø PATH¸¦ »ç¿ëÇÒ °ÍÀÌ°í, ½ÇÇà°¡´É ÇÁ·Î±×·¥À» µ¹¸± °ÍÀÌ´Ù.
<programlisting>
  /lib/ld-linux.so.2 --library-path PATH EXECUTABLE
</programlisting>
ÀÎÀÚ¾øÀÌ ld-linux.so¸¦ µ¹¸®´Â °ÍÀº ´ç½ÅÀÌ ÀÌ·¸°Ô »ç¿ëÇÏ´Âµ¥¿¡ µµ¿òÀ» ÁÙ °ÍÀÌ´Ù. ÇÏÁö¸¸, ÀÌ°ÍÀ» º¸ÅëÀÇ ¿ëµµ·Î »ç¿ëÇÏÁö ¸¶¶ó. ÀÌ°ÍµéÀº µð¹ö±ë¿ëÀÌ´Ù.
</para>
</sect3>

<sect3>
<title>LD_DEBUG</title>
<para>
GNU C¿¡¼­ ¶Ç´Ù¸¥ À¯¿ëÇÑ È¯°æº¯¼ö´Â LD_DEBUGÀÌ´Ù. ÀÌ°ÍÀº dl* ÇÔ¼ö¸¦ À§ÇØ ¸¸µé¾îÁ³´Ù. µû¶ó¼­ ±×µéÀÌ ÇÏ°í ÀÖ´Â °Íµé¿¡ ´ëÇÑ ¸Å¿ì ÀåÈ²ÇÑ Á¤º¸¸¦ ÁØ´Ù. ¿¹¸¦ º¸ÀÚ:
<programlisting>
  export LD_DEBUG=files
  command_to_run
</programlisting>
¶óÀÌºê·¯¸®¸¦ ´Ù·ê¶§ ÆÄÀÏ°ú ¶óÀÌºê·¯¸®ÀÇ µ¿ÀÛÀ» º¸¿©ÁÖ°í, ¾î¶² ÀÇÁ¸¼ºÀÌ ¹ß°ßµÇ¾ú°í, ¾î¶² SOs(sonames)°¡ ¾î¶² ¼ø¼­·Î ·ÎµåµÇ¾ú´ÂÁö ¸»ÇØÁØ´Ù. LD_DEBUG¸¦ ``bindings''·Î ¼³Á¤ÇÏ´Â °ÍÀº ½Éº¼Á¦ÇÑ¿¡ ´ëÇÑ Á¤º¸¸¦ º¸¿©ÁÖ°í, ``libs''¿¡ ¼³Á¤ÇÏ´ÂÀº °ÍÀº ¶óÀÌºê·¯¸® Å½»ö°æ·Î¿¡ ´ëÇØ¼­ º¸¿©ÁÖ°í, ``version''À¸·Î ¼³Á¤ÇÏ´Â °ÍÀº ¹öÀü ÀÇÁ¸¼ºÀ» º¸¿©ÁØ´Ù.
</para>

<para>
LD_DEBUG¸¦ ``help''·Î ¼³Á¤ÇÏ°í ÇÁ·Î±×·¥À» µ¹¸®¸é ¿©·¯°¡Áö ¿É¼ÇÀ» Ç¥½ÃÇÒ °ÍÀÌ´Ù. ´Ù½Ã, LD_DEBUG´Â º¸ÅëÀÇ »ç¿ëÀ» À§ÇØ ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó, µð¹ö±ë°ú °Ë»ç¸¦ À§ÇØ Æí¸®ÇÑ °ÍÀÌ´Ù.
</para>
</sect3>

<sect3>
<title>´Ù¸¥ È¯°æ º¯¼öµé</title>
<para>
·Îµù°úÁ¤À» Á¦¾îÇÒ ¼ö ÀÖ´Â ¸¹Àº È¯°æº¯¼öµéÀÌ ÀÖ´Ù; ±×°ÍµéÀÇ ÀÌ¸§Àº LD_³ª RTLD_·Î ½ÃÀÛÇÑ´Ù. ´ëºÎºÐÀÇ ´Ù¸¥ È¯°æº¯¼öµéÀº ·Î´õ ÇÁ·Î¼¼½ºÀÇ Àú ¼öÁØÀÇ µð¹ö±ëÀÌ³ª Æ¯º°ÇÑ ¿ëµµÀÇ ±¸ÇöÀ» À§ÇØ Á¸ÀçÇÑ´Ù. ±×°Íµé ´ëºÎºÐÀº ¹®¼­È­°¡ Àß µÇ¾îÀÖÁö ¾Ê´Ù; ´ç½ÅÀÌ ±×°Íµé¿¡ ´ëÇØ ¾Ë°í ½Í¾îÇÑ´Ù¸é ÃÖ»óÀÇ ¹æ¹ýÀº ·Î´õÀÇ ¼Ò½ºÄÚµå¸¦ ÀÐ´Â °ÍÀÌ´Ù(gccÀÇ ÀÏºÎ).
</para>

<para>
Æ¯º°ÇÑ Á¶Ä¡°¡ ÃëÇØÁöÁö ¾Ê´Â´Ù¸é, µ¿Àû ¿¬°á ¶óÀÌºê·¯¸®¿¡ »ç¿ëÀÚÀÇ ±ÇÇÑÀ» Çã¶ôÇÏ´Â °ÍÀº setuid/setgid°¡ °É¸° ÇÁ·Î±×·¥¿¡°Ô ¸Å¿ì À§ÇèÇÏ´Ù. µû¶ó¼­, GNU ·Î´õ(ÇÁ·Î±×·¥ÀÌ ½ÃÀÛ½Ã¿¡ ÇÁ·Î±×·¥ÀÇ ³ª¸ÓÁö¸¦ ·ÎµåÇÏ´Â ·Î´õ)¿¡¼­ setuid/setgidÇÁ·Î±×·¥ÀÌ¶ó¸é ÀÌ º¯¼öµé(´Ù¸¥ ºñ½ÁÇÑ º¯¼öµé)Àº ¹«½ÃµÇ°Å³ª ±×µéÀÌ ÇÒ ¼ö ÀÖ´Â ¿ªÇÒÀÌ ¸Å¿ì Á¦ÇÑµÈ´Ù. ·Î´õ´Â ÇÁ·Î±×·¥ÀÇ ÆÛ¹Ì¼ÇÀ» Ã¼Å©ÇØ¼­ setuid/setgidÀÎÁö È®ÀÎÇÑ´Ù; uid/euid°¡ Æ²¸®°Å³ª, gid/egid°¡ Æ²¸®¸é ·Î´õ´Â ÇÁ·Î±×·¥ÀÌ setuid/setgid¶ó°í °¡Á¤(¶Ç´Â ±×·³ ÇÁ·Î±×·¥¿¡¼­ ÆÄ»ýµÈ°Í)ÇÏ°í µû¶ó¼­, ¸µÅ©¸¦ ¿¬°áÇÏ´Â µ¿ÀÛ¿¡ ¸Å¿ì Á¦ÇÑÀ» °¡ÇÏ°Ô µÈ´Ù. ´ç½ÅÀÌ ¸¸¾à GNU glibc¶óÀÌºê·¯¸® ¼Ò½ºÄÚµå¸¦ ÀÐ¾ú´Ù¸é, ´ç½ÅÀº ´ÙÀ½°ú °°Àº °ÍÀ» º¸¾ÒÀ» °ÍÀÌ´Ù; elf/rtld.c¿Í sysdeps/generic/dl-sysdep.c¸¦ º¸¾Æ¶ó. ÀÌ°ÍÀº ´ç½ÅÀÌ uid/gid°¡ euid/egid°¡ °°À¸¸é ÇÁ·Î±×·¥À» ºÒ·¯¼­ È¯°æº¯¼öµéÀÌ ÃÖ´ëÀÇ È¿°ú¸¦ ³ªÅ¸³¾ ¼ö ÀÖ´Ù´Â °ÍÀ» ÀÇ¹ÌÇÑ´Ù. ´Ù¸¥ À¯´Ð½º°°Àº ½Ã½ºÅÛ¿¡¼­´Â ´Ù¸¥ ¹æ½ÄÀ¸·Î Ã³¸®ÇÏÁö¸¸ °°Àº ÀÌÀ¯·Î Ã³¸®ÇÑ´Ù: setuid/setgidÇÁ·Î±×·¥ÀÌ È¯°æº¯¼öµé¿¡ ÀÇÇØ ³ª»Ú°Ô Ã³¸®µÇ¸é ¾ÈµÈ´Â ÀÌÀ¯ÀÌ´Ù.
</para>
</sect3>
</sect2>

<sect2>
<title>°øÀ¯ ¶óÀÌºê·¯¸® ¸¸µé±â</title>
<para>
°øÀ¯ ¶óÀÌºê·¯¸®¸¦ ¸¸µå´Â °ÍÀº ½±´Ù. Ã³À½À¸·Î, gcc-fPIC³ª fpicÇÃ·¡±×¸¦ »ç¿ëÇØ¼­ °øÀ¯ ¶óÀÌºê·¯¸®·Î »ç¿ëµÉ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé¾î¶ó. -fPIC³ª -fpic¿É¼ÇÀº ``À§Ä¡¿¡ µ¶¸³ÀûÀÎ ÄÚµå''¸¦ ¸¸µé¾îÁÖ°í, °øÀ¯ ¶óÀÌºê·¯¸®ÀÇ Á¶°ÇÀ» ¸¸Á·½ÃÅ²´Ù; ¾Æ·¡ÀÇ Â÷ÀÌÁ¡À» º¸¶ó. ±×¸®°í ÀÌ Çü½ÄÀ» µû¶ó¼­ °øÀ¯¶óÀÌºê·¯¸®¸¦ ¸¸µé¾î¶ó:
</para>

<programlisting>
gcc -shared -Wl,-soname,<replaceable>your_soname</replaceable> \
    -o <replaceable>library_name</replaceable> <replaceable>file_list</replaceable> <replaceable>library_list</replaceable>
</programlisting>

<para>
µÎ°³ÀÇ ¿ÀºêÁ§Æ® ÆÄÀÏ(a.o, b.o)¸¦ ¸¸µé°í ÀÌ°Íµé ¸ðµÎ¸¦ Æ÷ÇÔÇÏ´Â °øÀ¯ ¶óÀÌºê·¯¸®¸¦ ¸¸µå´Â ¿¹Á¦ÀÌ´Ù. ÄÄÆÄÀÏÀÌ µð¹ö±× Á¤º¸(-g)¿Í °æ°íÁ¤º¸(-Wall)¸¦ Æ÷ÇÔÇÏ´Âµ¥, ÀÌ°ÍµéÀº °øÀ¯¶óÀÌºê·¯¸®¸¦ À§ÇØ ÇÊ¿äÇÑ°ÍÀº ¾Æ´ÏÁö¸¸, ÃßÃµµÇ´Â Á¤º¸¶ó´Â °ÍÀ» ÁÖÀÇÇÏ¶ó. ÄÄÆÄÀÏÀº ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé°í(-c), -fPIC¿É¼ÇÀ» ¿ä±¸ÇÑ´Ù.
</para>

<programlisting>
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
</programlisting>

<para>
ÁÖÀÇÇÒ ¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Â °ÍµéÀÌ ÀÖ´Ù:

<itemizedlist>
<listitem>
    <para>
    ²À ÇÊ¿äÇÑ °æ¿ì°¡ ¾Æ´Ï¶ó¸é, °á°ú·Î »ý±ä ¶óÀÌºê·¯¸®¸¦ ºÐÇØÇÏ°Å³ª, ÄÄÆÄÀÏ·¯ ¿É¼ÇÀ¸·Î -fomit-frame-pointer ¿É¼ÇÀ» ÁÖÁö¸¶¶ó. °á°ú·Î ³ª¿Â ¶óÀÌºê·¯¸®´Â Àß µ¿ÀÛÇÒ °ÍÀÌ°í, À§ÀÇ Çàµ¿Àº µð¹ö°Å¸¦ ¹«¿ëÁö¹°·Î ¸¸µç´Ù
    </para>
</listitem>
<listitem>
    <para>
    ÄÚµå¸¦ »ý¼ºÇÏ±â À§ÇØ -fPICÀÌ³ª -fpicÀ» »ç¿ëÇÏ¶ó. ÄÚµå¸¦ »ý¼ºÇÏ±â À§ÇØ -fPICÀÌ³ª -fpicÀ» »ç¿ëÇÏ´Â °ÍÀº Å¸°Ù¿¡ µû¶ó¼­ ´Ù¸£´Ù. -fPICÀ» »ç¿ëÇÏ´Â°ÍÀº ¾ðÁ¦³ª µ¿ÀÛÇÑ´Ù. ÇÏÁö¸¸, -fpicÀ» »ç¿ëÇÏ´Â °Íº¸´Ù Å« ÄÚµå¸¦ »ý¼ºÇÒ °ÍÀÌ´Ù(PICÀº ´õ Å«ÄÚµå¸¦ À§ÇÑ°ÍÀÌ¶ó¼­ ´õ ¸¹Àº ¾çÀÇÄÚµå¸¦ ¸¸µç´Ù´Â °ÍÀ» ±â¾ïÇÏ¶ó). -fpic¿É¼ÇÀº ÀÛ°í ºü¸¥ ÄÚµå¸¦ ¸¸µç´Ù. ÇÏÁö¸¸, Àü¿ª½Éº¼ÀÌ³ª ÄÚµåÀÇ Å©±â °°Àº °Í¿¡¼­ ÇÃ·§Æû¿¡ µ¶¸³ÀûÀÌ´Ù. ¸µÄ¿´Â °øÀ¯ ¶óÀÌºê·¯¸®¸¦ ¸¸µé¶§ ÀÌ ¿É¼ÇÀÌ ¸Â´ÂÁö ¸»ÇØÁÙ °ÍÀÌ´Ù. ¾î´À°ÍÀ» ½á¾ß ÇÒÁö¸¦ ¸ð¸¦¶§, ³ª´Â ¾ðÁ¦³ª µ¿ÀÛÇÏ´Â -fPICÀ» ¼±ÅÃÇÑ´Ù.
</para>
</listitem>
<listitem>
    <para>
    ¸î¸îÀÇ °æ¿ì¿¡¼­, ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé±âÀ§ÇØ gcc¸¦ È£ÃâÇÏ´Â °ÍÀº ``-Wl,-export-dynamic'' ¿É¼ÇÀ» Æ÷ÇÔÇÒ °ÍÀÌ´Ù. º¸Åë µ¿Àû ½Éº¼Å×ÀÌºíÀº µ¿Àû ¿ÀºêÁ§Æ®¿¡ ÀÇÇØ »ç¿ëµÇ´Â ½Éº¼¸¸ Æ÷ÇÔÇÑ´Ù. ÀÌ ¿É¼ÇÀº(ELFÆÄÀÏÀ» ¸¸µé¶§) µ¿Àû ½Éº¼Å×ÀÌºí¿¡ ¸ðµç ½Éº¼À» Ãß°¡ÇÑ´Ù(´õ ¸¹Àº Á¤º¸¸¦ À§ÇØ ld(1)¸¦ Âü°íÇÏ¶ó). '¿ª ÀÇÁ¸¼º'ÀÌ ÀÖÀ»¶§ ÀÌ ¿É¼ÇÀ» ÇÊ¿ä·Î ÇÒ °ÍÀÌ´Ù. Áï, DL¶óÀÌºê·¯¸®°¡ ¶óÀÌºê·¯¸®¸¦ ·ÎµåÇÏ´Âµ¥ ÇÁ·Î±×·¥¿¡¼­ ÇÊ¿äÇÑ ½Éº¼ÀÌÁö¸¸, °ü·Ê¿¡ ÀÇÇØ Á¤ÀÇµÇÁö ¾ÊÀº ½Éº¼À» ÇÊ¿äÇÒ °æ¿ì »ç¿ëµÈ´Ù. ``¿ª ÀÇÁ¸¼º''ÀÌ ÀÛµ¿ÇÏ±â À§ÇØ¼­, ÁÖ ÇÁ·Î±×·¥Àº ½Éº¼ÀÌ µ¿ÀûÀ¸·Î µ¿ÀÛÇÏ°Ô ÇØ¾ß ÇÑ´Ù.
<!-- http://www.gnu.org/software/libtool/manual.html#Building%20modules -->
    ¸®´ª½º ½Ã½ºÅÛ¿¡¼­¸¸ »ç¿ëÇÑ´Ù¸é, ``-Wl,export-dynamic''´ë½Å¿¡ ``-rdynamic''À» »ç¿ëÇÒ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸, ELF¹®¼­¿¡ µû¸£¸é ``-rdynamic''ÇÃ·¡±×´Â ¸®´ª½º°¡ ¾Æ´Ñ ½Ã½ºÅÛÀÇ gcc¿¡¼­ Ç×»ó ÀÛµ¿ÇÏ´Â °ÍÀº ¾Æ´Ï´Ù.
</para>
</listitem>
</itemizedlist>
</para>


<para>
°³¹ß°úÁ¤µ¿¾È, ´Ù¸¥ ¸¹Àº ÇÁ·Î±×·¥¿¡¼­ »ç¿ëµÇ´Â ¶óÀÌºê·¯¸®¸¦ ¼öÁ¤ÇÏ°í ½ÍÀ»¶§°¡ ÀÖÀ» °ÍÀÌ´Ù -- ±×¸®°í ´ç½ÅÀº ÇÁ·Î±×·¥µéÀÌ ``°³¹ß»óÀÇ''¶óÀÌºê·¯¸®¸¦ »ç¿ëÇÏ´Â°ÍÀ» ¿øÄ¡ ¾ÊÀ» °ÍÀÌ°í, ¾î¶² Æ¯Á¤ ÀÀ¿ëÇÁ·Î±×·¥¸¸ÀÌ ±×°ÍÀ» »ç¿ëÇÏ±â¸¦ ¿øÇÒ°ÍÀÌ´Ù. ldÀÇ ``rpath''¿É¼ÇÀº ¾î¶² Æ¯Á¤ÇÑ ÇÁ·Î±×·¥ÀÌ ÄÄÆÄÀÏ µÉ ¶§ ½Ç½Ã°£À¸·Î ¶óÀÌºê·¯¸®ÀÇ ÆÐ½º¸¦ Á¤ÇØÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. gcc¿¡¼­ ´ç½ÅÀº ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î rpath¸¦ ÁöÁ¤ÇØ ÁÙ ¼ö ÀÖ´Ù:
<programlisting>
 -Wl,-rpath,$(DEFAULT_LIB_INSTALL_PATH)
</programlisting>
´ç½ÅÀÌ ¶óÀÌºê·¯¸® Å¬¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥À» ¼³Ä¡ÇÒ¶§ ÀÌ ¿É¼ÇÀ» »ç¿ëÇÑ´Ù¸é, ±×°ÍÀÌ Ãæµ¹À» ÀÏÀ¸Å°Áö ¾Ê°Å³ª, ¶óÀÌºê·¯¸®¸¦ ¼û±â´Â ´Ù¸¥ ±â¼úÀ» »ç¿ëÇÏµµ·Ï ÇÏ±âÀ§ÇØ LD_LIBRARY_PATH¸¦ »ç¿ëÇÏ´Â °ÍÀ» °ÆÁ¤ÇÒ ÇÊ¿ä°¡ ¾ø´Ù.
</para>

</sect2>

<sect2>
<title>°øÀ¯ ¶óÀÌºê·¯¸®¸¦ ¼³Ä¡ÇÏ°í »ç¿ëÇÏ±â</title>
<para>
´ç½ÅÀÌ °øÀ¯ ¶óÀÌºê·¯¸®¸¦ ¸¸µé¾ú´Ù¸é ´ç½ÅÀº ±×°ÍÀ» ¼³Ä¡ÇÏ°í ½Í¾î ÇÒ °ÍÀÌ´Ù. °£´ÜÇÑ ¹æ¹ýÀº Ç¥ÁØ µð·ºÅä¸®(¿¹µé¸¦¾î, /usr/lib)Áß ÇÏ³ª¿¡ Ä«ÇÇÇÏ°í ldconfig(8)À» ½ÇÇà½ÃÅ°´Â °ÍÀÌ´Ù.
</para>

<para>
Ã¹Â°·Î, ´ç½ÅÀº °øÀ¯¶óÀÌºê·¯¸®¸¦ ¾îµò°¡¿¡ ¼³Ä¡ÇÏ°í ½Í¾îÇÒ °ÍÀÌ´Ù. ±×¸®°í³ª¼­, ´ç½ÅÀº ½ÇÁ¦ÀÌ¸§À» ºÒ¸®´ÂÀÌ¸§À¸·Î ½Éº¼¸¯¸µÅ©¸¦ °É¾î¾ß¸¸ ÇÒ°ÍÀÌ´Ù(¹öÀü ¼ýÀÚ°¡ ¾ø´Â ºÒ¸®´Â ÀÌ¸§ÀÌ´Ù. Áï, ``.so''·Î ³¡³ª¼­ »ç¿ëÀÚµéÀÌ ¹öÀü¿¡ »ó°ü¾øÀÌ »ç¿ëÇÏ°Ô ÇÏ´Â °ÍÀÌ´Ù). °£´ÜÇÑ Á¢±Ù¹ýÀº ´ÙÀ½À» ½ÇÇà½ÃÅ°´Â °ÍÀÌ´Ù:
<programlisting>
 ldconfig -n <replaceable>directory_with_shared_libraries</replaceable>
</programlisting>
</para>

<para>
¸¶Áö¸·À¸·Î, ³ÊÀÇ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÒ¶§ ´ç½ÅÀÌ ¾²·ÁÇÏ´Â Á¤Àû, °øÀ¯ ¶óÀÌºê·¯¸®¿¡ ´ëÇØ ¸µÄ¿¿¡°Ô ¸»ÇØÁà¾ß ÇÑ´Ù. -lÀÌ³ª -L¿É¼ÇÀ» ¾²¸é µÈ´Ù.
</para>

<para>
´ç½ÅÀÌ ¶óÀÌºê·¯¸®¸¦ Ç¥ÁØ °ø°£(¿¹¸¦µé¾î, ´ç½ÅÀº /usr/libÀ» ¼öÁ¤ÇØ¾ßÇÏ´Â °ÍÀº ¾Æ´Ï´Ù)¿¡ ¼³Ä¡ÇÏ°í ½ÍÁö ¾ÊÀ» °æ¿ì, ´Ù¸¥ Á¢±Ù¹ýÀÌ ÀÖ´Ù. ÀÌ °æ¿ì¿¡, ´ç½ÅÀº ´Ù¸¥ ¾îµò°¡¿¡ ¼³Ä¡ÇÏ°í ÇÁ·Î±×·¥ÀÌ ¶óÀÌºê·¯¸®¸¦ Ã£µµ·Ï ÃæºÐÇÑ Á¤º¸¸¦ ÁÖ¸éµÈ´Ù. ÀÌ ¹æ¹ý¿¡´Â ¿©·¯°¡Áö°¡ ÀÖ´Ù. °£´ÜÇÑ°æ¿ì·Î gccÀÇ -L ÇÃ·¡±×¸¦ ÁÙ ¼ö ÀÖ´Ù. ``Ç¥ÁØÀÌ ¾Æ´Ñ''°ø°£¿¡ ÀÖ´Â Æ¯Á¤ÇÑ ÇÁ·Î±×·¥À» °¡Áö°í ÀÖ´Ù¸é ``rpath''¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹°·Ð È¯°æº¯¼ö¸¦ »ç¿ëÇØ¼­ ÇØ°áÇÏ´Â ¹æ¹ýµµ ÀÖ´Ù. Æ¯º°È÷, ´ç½ÅÀº ÄÝ·ÐÀ¸·Î ±¸ºÐµÇ¾îÁö´Â Ç¥ÁØ°ø°£¿¡¼­ °Ë»ö Àü¿¡ Ã£¾ÆÁö´Â °øÀ¯¶óÀÌºê·¯¸®µéÀÇ µð·ºÅä¸®µéÀÇ ¸ðÀÓÀÎ LD_LIBRARY_PATH¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ´ç½ÅÀÌ bash¸¦ »ç¿ëÇÑ´Ù¸é, my_programÀº ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î µÉ ¼ö ÀÖ´Ù:
</para>

<programlisting>
LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH  my_program
</programlisting>

<para>
¸î °³ÀÇ ÇÔ¼ö¸¦ ¿À¹ö¶óÀÌµå ÇÏ±¸ ½Í´Ù¸é, ¿À¹ö¶óÀÌµå ÇÒ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé°í LD_PRELOAD¸¦ ¼³Á¤ÇÏ¶ó;ÀÌ ¿ÀºêÁ§Æ® ÆÄÀÏÀÇ ÇÔ¼ö´Â ±× ÇÔ¼öµéÀ» ¿À¹ö¶óÀÌµå ÇÒ °ÍÀÌ´Ù(´Ù¸¥ ÇÔ¼öµéÀº ¿ø·¡ ÀÖ´ø´ë·Î ÀÖÀ» °ÍÀÌ´Ù).
</para>

<para>
º¸ÅëÀº ´ç½ÅÀÌ ¶óÀÌºê·¯¸®¸¦ °ÆÁ¤¾øÀÌ ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ÀÖ´Ù; ¸¸¾à API°¡ ¹Ù²î¸é ¶óÀÌºê·¯¸® Á¦ÀÛÀÚ´Â ºÒ¸®´Â ÀÌ¸§À» ¹Ù²Ù¾î¾ß ÇÑ´Ù. ÀÌ·±¹æ½ÄÀ¸·Î, ÇÑ ½Ã½ºÅÛ¿¡ ¸¹Àº ¶óÀÌºê·¯¸®°¡ ÀÖÀ»°ÍÀÌ°í, Á¤È®ÇÑ°ÍÀÌ °¢°¢ÀÇ ÇÁ·Î±×·¥¿¡¼­ ¼±ÅÃµÇ¾î¼­ »ç¿ëµÇ¾îÁø´Ù. ±×·¯³ª, ¾î¶² ÇÁ·Î±×·¥ÀÌ °°Àº ºÒ¸®´Â ÀÌ¸§À» °¡Áö´Â ¶óÀÌºê·¯¸®¿¡ ´ëÇØ¼­ ¾÷µ¥ÀÌÆ® ÇÑ°ÍÀÌ Àß µ¿ÀÛÇÏÁö ¾Ê´Â´Ù¸é, ³Ê´Â ¿¹Àü ¹öÀüÀÇ ¶óÀÌºê·¯¸®¸¦ ´Ù¸¥°÷¿¡ ¿Å°ÜµÎ°í ±× ÇÁ·Î±×·¥ÀÇ ÀÌ¸§À» ¹Ù²Ù°í(¿¹ÀüÀÌ¸§¿¡´Ù°¡ ``.orig''¸¦ ºÙÀÎ´Ù), ¶óÀÌºê·¯¸® »ç¿ëÀ» ¸®¼ÂÇÏ°í ½ÇÁ¦ÀÇ »õ·Î ÀÌ¸§ÀÌ ºÙÀº ÇÁ·Î±×·¥À» ºÎ¸£´Â ÀÛÀº ``°¨½Î´Â(wrapper)'' ½ºÅ©¸³Æ®¸¦ ¸¸µé¼ö ÀÖ´Ù. ´ç½ÅÀÌ ¿øÇÑ´Ù¸é, ¼ýÀÚ °ü·Ê°¡ Çã¿ëÇÏ´Â ÇÑ °°Àº µð·ºÅä¸®¿¡´Ù°¡ ¿¹ÀüÀÇ ¶óÀÌºê·¯¸®¸¦ ´Ù¸¥°÷¿¡ ¿Å°Ü µÑ ¼ö ÀÖ´Ù. °¨½Î´Â ½ºÅ©¸³Æ®´Â ´ÙÀ½°ú °°´Ù:
<programlisting>
  #!/bin/sh
  export LD_LIBRARY_PATH=/usr/local/my_lib:$LD_LIBRARY_PATH
  exec /usr/bin/my_program.orig $*
</programlisting>
´ç½ÅÀÌ ÇÁ·Î±×·¥À» ¾µ¶§ ²À ÀÌ°Í¿¡ ÀÇÁ¸ÇÏÁö´Â ¸»¾Æ¶ó; ÇÁ·Î±×·¥ÀÇ ¶óÀÌºê·¯¸®°¡ ¿¹Àü°Í°ú È£È¯ÀÌ µÇ´ÂÁö È®ÀÎÇÏ°Å³ª È£È¯µÇÁö ¾Ê´Â °³Á¤À» ÇßÀ»¶§ ¹öÀü³Ñ¹ö¸¦ Áõ°¡½ÃÄ×´ÂÁö Ã¼Å©ÇÏ¶ó. ÀÌ°ÍÀº ÃÖ¾ÇÀÇ °æ¿ìÀÇ ``±ä±Þ'' Á¢±Ù¹ýÀÌ´Ù.
</para>

<para>
´ç½ÅÀº °øÀ¯ ¶óÀÌºê·¯¸®ÀÇ ¸®½ºÆ®¸¦ ldd(1)À» »ç¿ëÇØ¼­ º¼¼ö ÀÖ´Ù. µû¶ó¼­, ¿¹¸¦µé¾î ´ç½ÅÀº ls¿¡ »ç¿ëµÇ´Â °øÀ¯ ¶óÀÌºê·¯¸®¸¦ º¼ ¼ö ÀÖ´Ù.
<programlisting>
  ldd /bin/ls
</programlisting>
ÀÏ¹ÝÀûÀ¸·Î ´ç½ÅÀº ±× ÀÌ¸§ÀÌ ¼ÓÇØÀÖ´Â µð·ºÅä¸®¿¡ µû¶ó °ü°èµÇ´Â ºÒ¸®´Â ÀÌ¸§ÀÇ ¸ñ·ÏÀ» º¼ °ÍÀÌ´Ù. Æ¯º°È÷ ¸ðµç °æ¿ì¿¡¼­ ´ÙÀ½ÀÇ µÎ°¡ÁöÀÇ ÀÇÁ¸¼ºÀ» °¡Áú°ÍÀÌ´Ù:
<itemizedlist>
<listitem>
    <para>
    /lib/ld-linux.so.N (NÀº 1ÀÌ»óÀÎµ¥ º¸Åë 2ÀÌ´Ù). ÀÌ°ÍÀº ´Ù¸¥ ¶óÀÌºê·¯¸®¸¦ ·ÎµåÇÏ´Â ¶óÀÌºê·¯¸®ÀÌ´Ù.
    </para>
</listitem>
<listitem>
    <para>
    libc.so.N (NÀº 6ÀÌ»óÀÌ´Ù). ÀÌ°ÍÀº C¶óÀÌºê·¯¸®ÀÌ´Ù. ´Ù¸¥ ¾ð¾î¿¡¼­ C¶óÀÌºê·¯¸®¸¦ »ç¿ëÇÏ°íÀÚ ÇÏ¸é(Àû¾îµµ ±×µéÀÇ ¶óÀÌºê·¯¸®¿¡¼­ ±¸ÇöÇÏ·ÁÇÒ¶§), ´Ù¸¥ ´ëºÎºÐÀÇ ÇÁ·Î±×·¥µéÀÌ ÀÌ°ÍÀ» Æ÷ÇÔÇÒ °ÍÀÌ´Ù.
    </para>
</listitem>
</itemizedlist>
ÁÖÀÇ : ´ç½ÅÀÌ ½Å·ÚÇÏÁö ¾Ê´Â ÇÁ·Î±×·¥¿¡ ldd¸¦ ½ÇÇà½ÃÅ°Áö <emphasis>¸»¾Æ¶ó</emphasis>. ldd(1) ¸Å´º¾óÀ» º¸¸é È®½ÇÇÏ°ÚÁö¸¸, ldd´Â (¾î¶² °æ¿ìµé¿¡ ÀÖ¾î¼­) È¯°æº¯¼ö¸¦ ¼³Á¤ÇÏ°í(ELF ¿ÀºêÁ§Æ®³ª, LD_TRACE_LOADED_OBJECTS) ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ´À¸·Î¼­ µ¿ÀÛÇÑ´Ù. ÀÌ°ÍÀº ½Å·ÚÇÏÁö ¸øÇÏ´Â ÇÁ·Î±×·¥¿¡ ÀÖ¾î¼­ (lddÀÇ Á¤º¸¸¦ º¸¿©ÁÖ´Â°Í ´ë½Å¿¡) ÀÓÀÇÀÇ ÄÚµå¸¦ ½ÇÇà½ÃÅ³ ¼ö ÀÖ´Ù. µû¶ó¼­, ¾ÈÀüÀ» À§ÇØ¼­ ´ç½ÅÀÌ ½Å·ÚÇÏÁö ¸øÇÏ´Â ÇÁ·Î±×·¥Àº ldd¸¦ »ç¿ëÇÏÁö ¸»¾Æ¶ó.
</para>
</sect2>

<sect2>
<title>È£È¯µÇÁö ¾Ê´Â ¶óÀÌºê·¯¸®µé</title>
<para>
»õ¹öÀüÀÇ ¶óÀÌºê·¯¸®°¡ ¿¹Àü¹öÀü°ú ÀÌÁø-È£È¯ÀÌ ¾ÈµÈ´Ù¸é, ºÒ·ÁÁö´Â ÀÌ¸§ÀÌ ¹Ù²î¾î¾ß ÇÑ´Ù. C¿¡¼­´Â ÀÌÁø È£È¯ÀÌ ¾ÈµÇ°Ô µÇ´Â 4°¡Áö ±âº» °æ¿ì°¡ ÀÖ´Ù.
<orderedlist>
<listitem>
    <para>
    ÇÔ¼öÀÇ ³»¿ëÀÌ ¹Ù²î¾î¼­ º»·¡ÀÇ ½ºÆå°ú ¸Â°Ô µ¿ÀÛÇÏÁö ¾Ê´Â °æ¿ì.
    </para>
</listitem>
<listitem>
    <para>
    ¼öÃâµÈ(exported) µ¥ÀÌÅ¸ ¾ÆÀÌÅÛÀÌ º¯ÇÑ°æ¿ì(¿¹¿Ü : µ¥ÀÌÅÍ ±¸Á¶°¡ °è¼Ó ¶óÀÌºê·¯¸® ³»¿¡ Á¸ÀçÇÑ´Ù¸é, µ¥ÀÌÅÍ ±¸Á¶ÀÇ ³»ºÎ¿¡ ¾ÆÀÌÅÛÀ» Ãß°¡ÇÏ´Â °ÍÀº ±¦Âú´Ù)
    </para>
</listitem>
<listitem>
    <para>
    exported ÇÔ¼ö°¡ Á¦°ÅµÉ °æ¿ì
    </para>
</listitem>
<listitem>
    <para>
    exported ÇÔ¼öÀÇ ÀÎÅÍÆäÀÌ½º°¡ º¯ÇÒ °æ¿ì
    </para>
</listitem>
</orderedlist>
</para>


<para>
ÀÌ·±°æ¿ì¸¦ ÇÇÇÏ·ÁÇÑ´Ù¸é, ÀÌÁø-È£È¯ÀÌ µÇ°Ô ¶óÀÌºê·¯¸®¸¦ À¯ÁöÇÒ ¼ö ÀÖ´Ù. ´Ù½Ã ¸»ÇØ¼­ ±×·±°æ¿ì¸¦ ÇÇÇÏ°í ½Í´Ù¸é ÀÀ¿ë ÀÌÁø ÀÎÅÍÆäÀÌ½º(ABI=Application Binary Interface)¸¦ ÇÒ ¼ö ÀÖ´Ù. ¿¹µéµé¾î, ¿¹Àü°ÍµéÀ» Áö¿ìÁö ¾Ê°í »õ·Î¿î ÇÔ¼ö¸¦ Ãß°¡ÇÏ°í ½ÍÀ» ¼ö ÀÖ´Ù. ´ç½ÅÀº ±¸Á¶¿¡ »õ·Î¿î ¾ÆÀÌÅÛÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸, ¿¹Àü ÇÁ·Î±×·¥ÀÌ »õ·Î¿î ¾ÆÀÌÅÛÀ» Ãß°¡ÇÑ ±¸Á¶¸¦ ÀÎ½ÄÇÏÁö ¸øÇÑ´Ù°Å³ª (ÇÁ·Î±×·¥ÀÌ ¾Æ´Ñ)¶óÀÌºê·¯¸®°¡ »õ·Î¿î °ø°£À» ÇÒ´çÇÏÁö ¸øÇÏ°Å³ª, Ãß°¡ÀÇ ¾ÆÀÌÅÛÀ» ¿É¼ÇÀ¸·Î ¸¸µå´Â°Í(¶Ç´Â ¶óÀÌºê·¯¸®°¡ ±×°ÍµéÀ» Ã¤¿ì°Ô ÇÏ´Â°Í)µîµîÀ» È®½ÇÈ÷ ÇØ¾ßÇÑ´Ù´Â °ÍÀ» ÁÖÀÇÇÏ¶ó. ÁÖÀÇÇÏ¶ó - À¯Àú°¡ ¹è¿­¿¡ ±¸Á¶¸¦ »ç¿ëÇÏ°í ÀÖ´Ù¸é ´ç½ÅÀº ¹è¿­ÀÇ ±¸Á¶¸¦ ´Ã¸±¼ö ¾ø´Ù.
</para>

<para>
C++(±×¸®°í ÄÄÆÄÀÏµÈ ÅÛÇÃ¸´ÀÌ³ª ´Ù¸¥ µð½ºÆÐÄ¡µÈ ¸Þ¼Òµå¸¦ Áö¿øÇÏ´Â ¾ð¾î)¿¡¼­ »óÈ²Àº ±³¹¦ÇØÁø´Ù. À§ÀÇ ¸ðµç »óÈ²ÀÌ ÀÌ·ç¾îÁ®¾ß ÇÏ°í, ´õ ÇØÁÖ¾î¾ß ÇÒ ÀÌ½´µéÀÌ ÀÖ´Ù. »óÈ²Àº ÄÄÆÄÀÏµÈ ÄÚµå¿¡¼­ ``º¸ÀÌÁö ¾Ê°Ô'' ±¸ÇöµÇ±â ¶§¹®¿¡ C++ÀÌ ¾î¶»°Ô ±¸ÇöµÇ¾ú´ÂÁö ¾ËÁö ¸øÇÏ¸é ¾Ö¸Å¸ðÈ£ÇØÁö´Â ÀÇÁ¸¼ºÀ» ³º´Â Á¤º¸µé ¶§¹®¿¡ ÀÏ¾î³­´Ù. ¾ö¹ÐÇÏ°Ô ¸»ÇÏ¸é, ÀÌ°ÍÀº ``»õ·Î¿î'' ÀÌ½´´Â ¾Æ´Ï´Ù. ´ÜÁö, ÄÄÆÄÀÏµÈ C++ÄÚµå°¡ ³Ê¿¡°Ô ³î¶ó°Ô ÇÒ ¼ö ÀÖÀ»°ÍÀÌ´Ù. ´ÙÀ½¿¡ ³ª¿À´Â °ÍµéÀº (¾Æ¸¶µµ ºÎÁ·ÇÏ°ÚÁö¸¸) <ulink url="http://www.trolltech.com/developer/faq/tech.html#bincomp"> Troll Tech's Technical FAQ</ulink>¿¡ ³ª¿À´Â ÀÌÁø È£È¯À» À¯ÁöÇÏ±â À§ÇØ C++¿¡¼­ »ç¿ëÇÏ¸é ¾ÈµÇ´Â °ÍµéÀÇ ¸ñ·ÏÀÌ´Ù.
<orderedlist>
<listitem>
    <para>
    °¡»óÇÔ¼ö¸¦ Àç ±¸ÇöÇÏ´Â°Í(±×·¸Áö ¾ÊÀ¸¸é ¿ø·¡ÀÇ ±¸Çö¿¡¼­´Â ¾ÈÀüÇÏ´Ù). ¿Ö³ÄÇÏ¸é ÄÄÆÄÀÏ·¯´Â ÄÄÆÄÀÏ½Ã¿¡(¸µÅ©½Ã°¡ ¾Æ´Ï¶ó) SuperClass::virtualFunction()¸¦ ±¸ÇÏ±â ¶§¹®ÀÌ´Ù.
    </para>
</listitem>
<listitem>
    <para>
    °¡»ó ¸â¹öÇÔ¼ö¸¦ ´õÇÏ°Å³ª Á¦°ÅÇÏ´Â°Í. ¿Ö³ÄÇÏ¸é ÀÌ°ÍÀº ¸ðµç ¼­ºêÅ¬·¡½ºÀÇ vtlbÀÇ Å©±â¿Í ±¸Á¶¸¦ ¹Ù²Ù±â ¶§¹®ÀÌ´Ù. 
    </para>
</listitem>
<listitem>
    <para>
    µ¥ÀÌÅÍ ¸â¹öÀÇ Å¸ÀÔÀ» ¹Ù²Ù°Å³ª ÀÎ¶óÀÎ ¸â¹öÇÔ¼ö¸¦ ÅëÇØ Á¢±ÙÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍ ¸â¹ö¸¦ ¿Å±â´Â°Í.
</para></listitem>
<listitem>
    <para>
    »õ ³ëµå¸¦ Ãß°¡ÇÏ´Â °Í ÀÌ¿Ü¿¡ Å¬·¡½º ±¸Á¶¸¦ ¹Ù²Ù´Â°Í.
</para></listitem>
<listitem>
    <para>
    privateµ¥ÀÌÅÍ ¸â¹ö¸¦ Ãß°¡ÇÏ°Å³ª »èÁ¦ÇÏ´Â°Í. ¿Ö³ÄÇÏ¸é ÀÌ°ÍÀº ¸ðµç ¼­ºêÅ¬·¡½ºÀÇ Å©±â¿Í ±¸Á¶¸¦ ¹Ù²Ù±â ¶§¹®ÀÌ´Ù.
</para></listitem>
<listitem>
    <para>
    ÀÎ¶óÀÎÀÌ ¾Æ´Ñ public, protected ¸â¹ö ÇÔ¼ö¸¦ Á¦°ÅÇÏ´Â°Í.
</para></listitem>
<listitem>
    <para>
    public, protected ¸â¹öÇÔ¼ö¸¦ inlineÀ¸·Î ¸¸µå´Â°Í.
</para></listitem>
<listitem>
    <para>
    inlineÇÔ¼ö¸¦ ¹Ù²Ù¾î¼­, ¿¹Àü¹öÀüÀÌ Á¦´ë·Î ÀÛµ¿ÇÏÁö ¾Ê´Â°Í.
</para></listitem>
<listitem>
    <para>
    Æ÷ÆÃÇÒ ÇÁ·Î±×·¥ÀÇ ¸â¹ö ÇÔ¼öÀÇ Á¢±Ù±ÇÇÑ(public, protected, private)À» ¹Ù²Ù´Â°Í. ¿Ö³ÄÇÏ¸é, ¾î¶² ÄÄÆÄÀÏ·¯´Â ÇÔ¼öÀÇ ÀÌ¸§¿¡ Á¢±Ù±ÇÇÑÀ» ºÙÀÌ±â ¶§¹®ÀÌ´Ù.
</para></listitem>
</orderedlist>
</para>

<para>
À§ÀÇ ÁÖ¾îÁø ¸ñ·Ï´ë·Î, C++¶óÀÌºê·¯¸® °³¹ßÀÚµéÀº ¶§¶§·Î ÀÌÁø È£È¯¼ºÀ» ±ú´Â ¾÷µ¥ÀÌÆ®¸¦ °èÈ¹ÇØ¾ß¸¸ÇÑ´Ù. ´ÙÇà½º·´°Ôµµ, À¯´Ð½º ±â¹Ý ½Ã½ºÅÛÀº µ¿½Ã¿¡ ·ÎµåµÇ´Â ¶óÀÌºê·¯¸®ÀÇ ¸¹Àº ¹öÀüÀ» °¡Áö°í ÀÖ¾î¼­, µð½ºÅ© °ø°£À» Á¶±Ý ÇÒ´çÇÑ´Ù¸é, À¯ÀúµéÀº ¿¹ÀüÀÇ ¶óÀÌºê·¯¸®¸¦ ¿ä±¸ÇÏ´Â ``¿¹Àü''ÇÁ·Î±×·¥À» µ¹¸±¼ö ÀÖ´Ù.
</para>
</sect2>
</sect1>







<sect1 id="dl-libraries">
<title>µ¿Àû ÀûÀç(DL) ¶óÀÌºê·¯¸®</title>
<para>
µ¿Àû ÀûÀç ¶óÀÌºê·¯¸®´Â ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§°¡ ¾Æ´Ñ ´Ù¸¥ ½Ã±â¿¡ ÀûÀçµÇ´Â ¶óÀÌºê·¯¸®ÀÌ´Ù. ÀÌ°ÍµéÀº ÇÃ·¯±×ÀÎÀÌ³ª ¸ðµâÀ» ±¸ÇöÇÒ¶§ ÀûÇÕÇÏ´Ù. ¿Ö³ÄÇÏ¸é ±×°ÍµéÀÌ ÇÊ¿äÇØÁú¶§±îÁö ÀûÀç¸¦ ±â´Ù¸± ¼ö ÀÖ±â ¶§¹®ÀÌ´Ù. ¿¹¸¦µé¾î, PAM(Pluggable Authentication Modules)½Ã½ºÅÛÀº °ü¸®ÀÚ°¡ ÀÎÁõÀ» °ü¸®ÇÏ´Â °ÍÀ» Çã¿ëÇÏ±â À§ÇØ DL¶óÀÌºê·¯¸®¸¦ »ç¿ëÇÑ´Ù. ÀÌ°ÍµéÀº ¶ÇÇÑ ¶§¶§·Î ÄÚµå¸¦ ¸Ó½Å ÄÚµå·Î ¹Ù²Ù°í È¿À²À» À§ÇØ ¸ØÃßÁö ¾Ê°í ÄÄÆÄÀÏµÈ ÄÚµå·Î ¸¸µå´Â ÀÎÅÍÇÁ¸®ÅÍ¸¦ ±¸ÇöÇÏ´Âµ¥ À¯¿ëÇÏ´Ù. ÀÌ°ÍÀº ½Ç½Ã°£ÀÇ(just-in-time) ÄÄÆÄÀÏ·¯³ª MUD(multi-user dungeon)À» ±¸ÇöÇÏ´Âµ¥¿¡ À¯¿ëÇÏ´Ù.
</para>

<para>
¸®´ª½º¿¡¼­, DL ¶óÀÌºê·¯¸®´Â ±×µéÀÇ Æ÷¸äÀÇ °üÁ¡¿¡ ÀÖ¾î¼­ Æ¯º°ÇÏÁö ¾Ê´Ù; ±×µéÀº Ç¥ÁØÀÇ ¿ÀºêÁ§Æ® ÆÄÀÏ·Î ¸¸µé¾îÁö°Å³ª, À§¿¡¼­ ¾ð±ÞµÈ Ç¥ÁØÀÇ °øÀ¯ ¶óÀÌºê·¯¸® ÆÄÀÏ·Î ¸¸µé¾îÁø´Ù. ÁÖ¿ä Â÷ÀÌÁ¡Àº ÇÁ·Î±×·¥ÀÇ ¸µÅ©½Ã³ª ½ÃÀÛ½Ã¿¡ ÀûÀçµÇÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù; ´ë½Å, ¶óÀÌºê·¯¸®¸¦ ¿­°Å³ª, ½Éº¼À» Ã£°Å³ª, ¿¡·¯¸¦ Á¶Á¤ÇÏ°Å³ª, ¶óÀÌºê·¯¸®¸¦ ´Ý´Â Æ¯º°ÇÑ API°¡ ÀÖ´Ù. C »ç¿ëÀÚµéÀº ÀÌ·± API¸¦ »ç¿ëÇÏ±âÀ§ÇØ dlfcn.h¶ó´Â Çì´õÆÄÀÏÀ» Æ÷ÇÔÇØ¾ß ÇÑ´Ù.
</para>

<para>
¸®´ª½º¿¡¼­ »ç¿ëµÇ´Â ÀÎÅÍÆäÀÌ½º´Â ¼Ö¶ó¸®½º¿¡¼­ »ç¿ëµÇ´Â ÀÎÅÍÆäÀÌ½º¿Í °°´Ù. ÀÌ°ÍÀ» ³ª´Â ``dlopen()'' API¶ó°í ºÒ¸¦ °ÍÀÌ´Ù. ±×·¯³ª, ÀÌ °°Àº ÀÎÅÍÆäÀÌ½º°¡ ¸ðµç ÇÃ·§Æû¿¡¼­ Áö¿øµÇ´Â °ÍÀº ¾Æ´Ï´Ù; HP-UX´Â shl_load()¹æ¹ýÀ» »ç¿ëÇÏ°í, À©µµ¿ìÁî´Â ¿ÏÀüÈ÷ ´Ù¸¥ ÀÎÅÍÆäÀÌ½ºÀÇ DLLsÀ» »ç¿ëÇÑ´Ù. ¸¸¾à ´ç½ÅÀÌ Æø³ÐÀº Æ÷ÆÃ¼ºÀÌ ¸ñÇ¥¶ó¸é, ´ç½ÅÀº ÀÌ·± ´Ù¸¥ ÇÃ·§ÆûÀ» ¼û±â´Â ¶óÀÌºê·¯¸®¸¦ »ý°¢ÇØ¾ß ÇÒ°ÍÀÌ´Ù. ÇÏ³ªÀÇ ¹æ¹ýÀº ¸ðµâÀÇ µ¿Àû ÀûÀç¸¦ Áö¿øÇÏ´Â glib ¶óÀÌºê·¯¸®ÀÌ´Ù; ±×°ÍÀº ÀÌ ÇÔ¼öµéÀÇ Æ÷ÆÃ°¡´ÉÇÑ ÀÎÅÍÆäÀÌ½º¸¦ ±¸ÇöÇÏ±âÀ§ÇØ ÇÃ·§ÆûÀÇ µ¿Àû ÀûÀç ·çÆ¾À» »ç¿ëÇÑ´Ù. <ulink url="http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.html">http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.html</ulink>ÀÇ ¸µÅ©¿¡¼­ glib¿¡ ´ëÇØ ¸¹Àº °ÍÀ» Ã£¾Æº¼ ¼ö ÀÖ´Ù. glib ÀÎÅÍÆäÀÌ½º°¡ ÀÌ ¹®¼­¿¡ Àß ¼³¸íµÇÀÖ±â ¶§¹®¿¡ ´õ ¾ð±ÞÇÏÁö ¾Ê°Ú´Ù. ´Ù¸¥ ¹æ¹ýÀº <ulink url="http://www.gnu.org/software/libtool/libtool.html">GNU libtool</ulink>ÀÇ ÀÏºÎÀÎ libltdlÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ´ç½ÅÀÌ ÀÌ°Íº¸´Ù ´õ ±â´ÉÀûÀÎ°ÍÀ» ¿øÇÑ´Ù¸é, CORBA ORB(Object Request Broker)¸¦ Ã£¾Æº¸¾Æ¶ó. ´ç½ÅÀÌ ¸®´ª½º¿Í ¼Ö¶ó¸®½º¿¡¼­ Á÷Á¢ Áö¿øµÇ´Â °ÍÀ» ¾ÆÁ÷µµ ¿øÇÏ°í ÀÖ´Ù¸é, °è¼Ó ÀÐ¾î³ª°¡¶ó.
</para>

<sect2 id="dlopen">
<title>dlopen()</title>
<para>
dlopen(3)ÇÔ¼ö´Â ¶óÀÌºê·¯¸®¸¦ ¿­°í ±×°ÍÀÌ »ç¿ëµÇµµ·Ï ÁØºñ½ÃÄÑÁØ´Ù. C¿¡¼­ ÇÁ·ÎÅäÅ¸ÀÔÀº ´ÙÀ½°ú °°´Ù:
<programlisting>
  void * dlopen(const char *filename, int flag);
</programlisting>
ÆÄÀÏÀÌ¸§ÀÌ ``/''(Áï, Àý´ë°æ·Î)·Î ½ÃÀÛÇÑ´Ù¸é dlopen()Àº Áï½Ã »ç¿ëÇÏ·Á ÇÑ´Ù(¶óÀÌºê·¯¸®¸¦ Ã£À¸·Á ÇÏÁö ¾Ê´Â´Ù). ±×·¸Áö ¾ÊÀ¸¸é, dlopen()Àº ´ÙÀ½°ú °°Àº ¼ø¼­·Î ¶óÀÌºê·¯¸®¸¦ Ã£´Â´Ù:
<orderedlist>
<listitem>
    <para>
    »ç¿ëÀÚÀÇ LD_LIBRARY_PATHÀÇ È¯°æº¯¼öÀÇ ÄÝ·ÐÀ¸·Î ±¸ºÐÁö¾îÁø µð·ºÅä¸®
</para></listitem>
<listitem>
    <para>
    (/etc/ld.so.conf¿¡¼­ ÆÄ»ýµÈ) /etc/ld.so.cache¿¡ ¸í½ÃµÇ¾îÀÖ´Â ¶óÀÌºê·¯¸®ÀÇ ¸ñ·Ï
</para></listitem>
<listitem>
    <para>
    /lib, /usr/lib. ¼ø¼­¸¦ ÁÖÀÇÇÏ¶ó; ÀÌ°ÍÀº ¿¹ÀüÀÇ a.out·Î´õ°¡ »ç¿ëÇÑ ¼ø¼­ÀÇ ¿ªÀÌ´Ù. ¿¹ÀüÀÇ a.out·Î´õ´Â ÇÁ·Î±×·¥À» ·ÎµåÇÒ¶§ /usr/libÀ» Ã£°í /libÀ» Ã£¾Ò´Ù(ld.so(8)ÀÇ manÆäÀÌÁö¸¦ Âü°íÇÏ¶ó). º¸ÅëÀº ¾î¶² µð·ºÅä¸®³ª ´Ù¸¥µð·ºÅä¸® ÇÏ³ª¿¡¸¸ ¶óÀÌºê·¯¸®°¡ ÀÖ±â ¶§¹®¿¡(µÑ´Ù ¾øÀ»¼öµµ ÀÖ´Ù) ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. ±×¸®°í °°ÀºÀÌ¸§À» °¡Áø ´Ù¸¥ ¶óÀÌºê·¯¸®´Â ÀáÀçÀûÀÎ À§ÇèÀ» °¡Áö°í ÀÖ´Ù.
<!-- Michael Kerrisk found that it's /lib, then /usr/lib -->
</para></listitem>
</orderedlist>
dlopen()¿¡¼­ <replaceable>flag</replaceable>ÀÇ °ªÀº ``µ¿Àû ¶óÀÌºê·¯¸®°¡ ½ÇÇàµÇ¸é¼­ ÄÚµåÀÇ Á¤ÀÇµÇÁö ¾ÊÀº ½Éº¼À» Ã³¸®ÇÏ¶ó''ÀÇ ÀÇ¹Ì¸¦ °¡Áø RTLD_LAZYÀÌ°Å³ª, ``dlopen()ÀÌ ¸®ÅÏÇÏ±â Àü¿¡ ¸ðµç Á¤ÀÇµÇÁö ¾ÊÀº ½Éº¼À» Ã³¸®ÇÏ°í, ±×°ÍÀÌ µÇÁö ¾ÊÀ» °æ¿ì ½ÇÆÐÇÏ¶ó''ÀÇ ÀÇ¹Ì¸¦ Áö´Ñ RTLD_NOW°¡ ÀÖ´Ù. RTLD_GLOBALÀº <replaceable>flag</replaceable>ÀÇ °ª¼Ó¿¡ ¿É¼ÇÀ¸·Î ¾µ¼ö ÀÖ´Ù. ÀÇ¹Ì´Â ¶óÀÌºê·¯¸®¿¡ ÀûÀçµÇ´Â ¿ÜºÎ ½Éº¼µéÀº ±× ÈÄ¿¡ ÀûÀçµÇ´Â ¶óÀÌºê·¯¸®¿¡ ÀÇÇØ¼­ °¡´ÉÇÏ´Ù´Â °ÍÀÌ´Ù. µð¹ö±ë½Ã¿¡, RTLD_NOW¸¦ ¾²±â¸¦ ¿øÇÒ°ÍÀÌ´Ù; RTLD_LAZY´Â Á¤ÀÇµÇÁö ¾ÊÀº ½Éº¼ÀÌ ÀÖÀ¸¸é ¾Ë¾Æº¼¼ö ¾ø´Â ¿¡·¯¸¦ ³»±â ¶§¹®ÀÌ´Ù. RTLD_NOW¸¦ ¾²¸é¼­ ¶óÀÌºê·¯¸®¸¦ ¿©´Â °ÍÀº ¾à°£ÀÇ ½Ã°£ÀÌ ´õ °É¸°´Ù(ÇÏÁö¸¸ ³ªÁß¿¡ Ã£´Â ¼Óµµ´Â »¡¶óÁø´Ù); ¸¸¾à ÀÌ°ÍÀÌ À¯Àú ÀÎÅÍÆäÀÌ½º ¹®Á¦¸¦ ÀÏÀ¸Å²´Ù¸é, ´ç½ÅÀº ³ªÁß¿¡ RTLD_LAZY·Î ¹Ù²Ü ¼ö ÀÖ´Ù.
</para>

<para>
¶óÀÌºê·¯¸®µéÀÌ ¼­·Î ÀÇÁ¸ÇÑ´Ù¸é(¿¹¸¦µé¾î X°¡ Y¿¡ ÀÇÁ¸ÇÑ´Ù¸é), ´ç½ÅÀº ÀÇÁ¸´çÇÏ´Â °ÍÀ» ¸ÕÀú ·ÎµåÇØ¾ßÇÑ´Ù(ÀÌ ¿¹Á¦¿¡¼­ Y¸¦ ·ÎµåÇÏ°í X¸¦ ·ÎµåÇØ¾ß ÇÑ´Ù).
</para>

<para>
dlopen()ÀÇ ¸®ÅÏ °ªÀº ´Ù¸¥ DL¶óÀÌºê·¯¸® ·çÆ¾ÀÌ »ç¿ëÇÏ±â¿¡ ¾Ö¸Å¸ðÈ£ÇÏ°Ô ´À²¸Áö´Â ``ÇÚµé''ÀÌ´Ù. dlopen()Àº ·Îµå°¡ ¼º°øÇÏÁö ¸øÇÏ°Å³ª ´ç½ÅÀÌ Ã¼Å©ÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù°í »ý°¢ÇÏ¸é NULLÀ» ¸®ÅÏÇÑ´Ù. dlopen()¿¡ ÀÇÇØ °°Àº ¶óÀÌºê·¯¸®°¡ ÇÑ¹øÀÌ»ó ·ÎµåµÇ¸é °°Àº ÆÄÀÏ ÇÚµéÀÌ ¸®ÅÏµÈ´Ù.
</para>

<para>
¶óÀÌºê·¯¸®°¡ _initÀÌ¶ó ÀÌ¸§Áö¾îÁø ·çÆ¾À» »ç¿ëÇÑ´Ù¸é(export), ±× ÄÚµå´Â dlopen()ÀÌ ¹ÝÈ¯ÇÏ±â Àü¿¡ ½ÇÇàµÈ´Ù. ´ç½ÅÀº ÃÊ±âÈ­ ·çÆ¾À» ±¸ÇöÇÏ±âÀ§ÇØ ´ç½ÅÀÇ ¶óÀÌºê·¯¸®¿¡¼­ ÀÌ »ç½ÇÀ» »ç¿ëÇßÀ»°ÍÀÌ´Ù. ´õ ÀÚ¼¼ÇÑ ³»¿ëÀ» À§ÇØ <xref linkend="init-and-fini">À» º¸¾Æ¶ó.
</para>
</sect2>


<sect2 id="dlerror">
<title>dlerror()</title>
<para>
¿¡·¯´Â dlerror()¸¦ È£ÃâÇÔÀ¸·Î½á º¸°íµÉ¼ö ÀÖ´Ù. dlerror()´Â dlerror(), dlsym(), dlclose()Áß ¸¶Áö¸· ºÎ¸¥°ÍÀÇ ¿¡·¯ÀÇ ½ºÆ®¸µÀ» ¹ÝÈ¯ÇÑ´Ù. ÇÏ³ªÀÇ ÀÌ»óÇÑÁ¡Àº dlerror()¸¦ ºÎ¸£°í ³ª¼­ dlerror()¸¦ ºÎ¸£´Â °ÍÀº ±× »çÀÌ¿¡ ´Ù¸¥ ¿¡·¯°¡ ¾øÀ¸¸é NULLÀ» ¹ÝÈ¯ÇÑ´Ù´Â °ÍÀÌ´Ù.
</para>
</sect2>


<sect2 id="dlsym">
<title>dlsym()</title>
<para>
´ç½ÅÀÌ »ç¿ëÇÒ ¼ö ¾ø´Ù¸é DL¶óÀÌºê·¯¸®¸¦ ·ÎµùÇÏ´Â ÀÇ¹Ì°¡ ¾ø´Ù. DL¶óÀÌºê·¯¸®¸¦ »ç¿ëÇÏ´Â Áß¿äÇÑ ·çÆ¾Àº dlsym(3)ÀÌ´Ù. ÀÌ°ÍÀº ¿­·ÁÁø ¶óÀÌºê·¯¸®ÀÇ ½Éº¼ÀÇ °ªÀ» Ã£¾ÆÁØ´Ù. ÀÌ ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀÇµÈ´Ù:
<programlisting>
 void * dlsym(void *handle, char *symbol);
</programlisting>
ÇÚµéÀº dlopen¿¡ ÀÇÇØ ¹ÝÈ¯µÈ °ªÀÌ°í, ½Éº¼Àº NIL·Î ³¡³ª´Â ½ºÆ®¸µÀÌ´Ù. ´ç½ÅÀÌ ÇÒ ¼ö ÀÖ´Ù¸é ÀÖ´Ù¸é, dlsym()ÀÇ °á°ú¸¦ void* Æ÷ÀÎÅÍ·Î ÀúÀåÇÏÁö ¸¶¶ó. ¿Ö³ÄÇÏ¸é, ´ç½ÅÀº »ç¿ëÇÒ¶§¸¶´Ù Ä³½ºÆ®ÇØ¼­ »ç¿ëÇØ¾ß ÇÏ±â¶§¹®ÀÌ´Ù(±×¸®°í ´Ù¸¥»ç¶÷µéÀÌ ÇÁ·Î±×·¥À» À¯ÁöÇÏ´Âµ¥¿¡ ´õ ÀûÀº Á¤º¸¸¦ ÁÙ°ÍÀÌ´Ù).
</para>

<para>
dlsym()Àº ½Éº¼ÀÌ ¾øÀ¸¸é NULLÀ» ¹ÝÈ¯ÇÒ °ÍÀÌ´Ù. ¸¸¾à ´ç½ÅÀÇ ½Éº¼¿¡ NULLÀÌ³ª 0ÀÌ ¾ø´Ù´Â °ÍÀ» ¾Ë¸é ÁÁ°ÚÁö¸¸, ´ÙÀ½°ú °°Àº ÀáÀçÀûÀÎ ¹®Á¦°¡ ÀÖ´Ù: ´ç½ÅÀÌ ¹ÞÀº NULLÀÌ ¿¡·¯ÀÎ°¡, ¾Æ´Ï¸é ½Éº¼ÀÇ °ªÀÌ NULLÀÎ°¡? Ç¥ÁØÀûÀÎ ÇØ°á¹ýÀº dlerror()¸¦ ºÎ¸£°í(Àü¿¡ ÀÖ´ø ¿¡·¯µéÀ» ¾ø¾Ø´Ù), dlsym()À» ºÒ·¯¼­ ½Éº¼ÀÇ °ªÀ» ºÎ¸£°í, dlerror()¸¦ ºÒ·¯¼­ ¿¡·¯°¡ ³µ´ÂÁö Ã¼Å©ÇÑ´Ù. ´Ü¼øÇÑ ÄÚµå´Â ´ÙÀ½°ú °°´Ù:
<programlisting>
 dlerror(); /* clear error code */
 s = (actual_type) dlsym(handle, symbol_being_searched_for);
 if ((err = dlerror()) != NULL) {
  /* handle error, the symbol wasn't found */
 } else {
  /* symbol found, its value is in s */
 }
</programlisting>
</para>
</sect2>

<sect2 id="dlclose">
<title>dlclose()</title>
<para>
dlopen()ÀÇ ¹Ý´ë´Â dlclose()·Î¼­, DL ¶óÀÌºê·¯¸®¸¦ ´Ý¾ÆÁØ´Ù. DL ¶óÀÌºê·¯¸®°¡ µ¿Àû ÆÄÀÏ ÇÚµéÀÇ ¸µÅ© ¼ö¸¦ °ü¸®ÇÏ±â ¶§¹®¿¡, µ¿Àû ¶óÀÌºê·¯¸®´Â dlopenÀÌ ¼º°øÇÑ ¸¸Å­ ¸ðµÎ dlclose¸¦ ºÒ·¯ÁÖ±â Àü¿¡ ´Ù ÇÒ´çÀÌ ¾ø¾îÁöÁö´Â ¾Ê´Â´Ù. µû¶ó¼­, °°Àº ÇÁ·Î±×·¥ÀÌ °°Àº ¶óÀÌºê·¯¸®¸¦ ¿©·¯¹ø ºÒ·¯ÁÖ´Â°ÍÀº ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. ¶óÀÌºê·¯¸®°¡ ÇÒ´çÀÌ ¾ø¾îÁø´Ù¸é, ÇÔ¼öÀÇ _fini°¡ ºÒ¸°´Ù(Á¸ÀçÇÑ´Ù¸é); ´õ ÀÚ¼¼ÇÑ Á¤º¸¸¦ À§ÇØ <xref linkend="init-and-fini">¸¦ º¸¾Æ¶ó. ÁÖÀÇÇÏ¶ó : dlclose()´Â ¼º°øÇÏ¸é 0À» ¸®ÅÏÇÏ°í, ¾Æ´Ï¸é 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÑ´Ù; ¾î¶² ¸®´ª½º ¸Þ´º¾óÀº ÀÌ°ÍÀ» ¾ð±ÞÇÏ°í ÀÖÁö ¾Ê´Ù.
</para>
</sect2>




<sect2 id="dl-library-example">
<title>DL ¶óÀÌºê·¯¸® ¿¹Á¦</title>
<para>
¿©±â¿¡ ÀÖ´Â ¿¹Á¦´Â dlopen(3)ÀÇ ¸ÇÆäÀÌÁö¿¡ ³ª¿À´Â ¿¹Á¦ÀÌ´Ù. ÀÌ ¿¹Á¦´Â math¶óÀÌºê·¯¸®¸¦ ·ÎµåÇØ¼­, ÄÚ»çÀÎ 2.0À» Ãâ·ÂÇÑ´Ù. ¶ÇÇÑ, °¢°¢ÀÇ ´Ü°è¿¡¼­ ¿¡·¯ Ã¼Å©¸¦ ÇÑ´Ù(ÀÌ·¸°Ô ÇÏ±â¸¦ ÃßÃµÇÑ´Ù).
<programlisting>
<![CDATA[

    #include <stdlib.h>
    #include <stdio.h>
    #include <dlfcn.h>

    int main(int argc, char **argv) {
        void *handle;
        double (*cosine)(double);
        char *error;

        handle = dlopen ("/lib/libm.so.6", RTLD_LAZY);
        if (!handle) {
            fputs (dlerror(), stderr);
            exit(1);
        }

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

        printf ("%f\n", (*cosine)(2.0));
        dlclose(handle);
    }
]]>
</programlisting>
</para>

<para>
¸¸¾à ÀÌ ÇÁ·Î±×·¥ÀÇ ÆÄÀÏÀÌ¸§ÀÌ "foo.c"¶ó¸é, ´ÙÀ½°ú °°Àº ¸í·ÉÀ¸·Î ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖÀ» °ÍÀÌ´Ù:
<programlisting>
    gcc -o foo foo.c -ldl
</programlisting>
<!-- Removed ``-Wl,-export-dynamic'', it's not necessary -->
</para>

</sect2>

</sect1>

<sect1 id="miscellaneous">
<title>Miscellaneous</title>

<sect2 id="nm">
<title>nm ¸í·É</title>
<para>
nm(1)¸í·ÉÀº ÁÖ¾îÁø ¶óÀÌºê·¯¸®ÀÇ ½Éº¼ÀÇ ¸®½ºÆ®¸¦ º¸°íÇÑ´Ù. ÀÌ°ÍÀº Á¤Àû, °øÀ¯ ¶óÀÌºê·¯¸®¿¡¼­ ¸ðµÎ µ¿ÀÛÇÑ´Ù. ÁÖ¾îÁø ¶óÀÌºê·¯¸®¿¡¼­, nm(1)Àº Á¤ÀÇµÈ ½Éº¼ÀÇ ÀÌ¸§, °¢°¢ÀÇ ½Éº¼ÀÇ °ª, ½Éº¼ÀÇ Å¸ÀÔÀ» ³ª¿­ÇÑ´Ù. ÀÌ°ÍÀº ¶ÇÇÑ ¶óÀÌºê·¯¸®¿¡¼­ °¡´ÉÇÏ´Ù¸é(-l¿É¼ÇÀ» º¸¶ó), ½Éº¼ÀÌ ¼Ò½ºÄÚµåÀÇ ¾îµð¿¡¼­ Á¤ÀÇµÇ¾ú´ÂÁö ¾Ë·ÁÁØ´Ù(ÆÄÀÏÀÌ¸§°ú ÁÙ ¹øÈ£¸¦ Ç¥½ÃÇÔÀ¸·Î¼­).
</para>

<para>
½Éº¼Å¸ÀÔÀº ´õ ¸¹Àº ¼³¸íÀ» ¿ä±¸ÇÑ´Ù. Å¸ÀÔÀº ÇÑ±ÛÀÚ·Î½á Ç¥½ÃµÈ´Ù; ¼Ò¹®ÀÚ´Â Å¸ÀÔÀÌ Áö¿ªÀûÀÌ¶ó´Â °ÍÀÌ°í, ´ë¹®ÀÚ´Â Å¸ÀÔÀÌ Àü¿ªÀû(¿ÜºÎÀû)ÀÌ¶ó´Â °ÍÀ» ÀÇ¹ÌÇÑ´Ù. º¸ÅëÀÇ ½Éº¼Å¸ÀÔµéÀº ´ÙÀ½°ú °°´Ù. T (ÄÚµå¼½¼Ç¿¡¼­ º¸ÅëÀÇ Á¤ÀÇ), D (ÃÊ±âÈ­ µ¥ÀÌÅÍ ¼½¼Ç), B (ÃÊ±âÈ­µÇÁö ¾ÊÀº µ¥ÀÌÅÍ ¼½¼Ç), U (Á¤ÀÇµÇÁö ¾ÊÀ½; ½Éº¼ÀÌ ¶óÀÌºê·¯¸®¿¡ÀÇÇØ »ç¿ëµÇÁö¸¸ ¶óÀÌºê·¯¸®¿¡ ÀÇÇØ Á¤ÀÇµÇÁö ¾Ê¾Ò´Ù), W (¾àÇÔ; ´Ù¸¥ ¶óÀÌºê·¯¸®°¡ ÀÌ ½Éº¼À» Á¤ÀÇÇÑ´Ù¸é, ±× Á¤ÀÇ°¡ ÀÌ Á¤ÀÇ¸¦ ¿À¹ö¶óÀÌµå ÇÒ ¼ö ÀÖ´Ù).
</para>

<para>
´ç½ÅÀÌ ÇÔ¼öÀÇ ÀÌ¸§À» ¾ËÁö¸¸, ¾î¶² ¶óÀÌºê·¯¸®¿¡¼­ Á¤ÀÇµÇÀÖ´ÂÁö ±â¾ïÇÏÁö ¸øÇÑ´Ù¸é, grepÀ¸·Î ¶óÀÌºê·¯¸®¸¦ Ã£À¸¸é¼­ nmÀÇ ``-o''¿É¼Ç(°¢°¢ÀÇ ÁÙÀÇ ÆÄÀÏ ÀÌ¸§À» ¾Õ¿¡ ºÙÀÎ´Ù)À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. bash¿¡¼­ ´ç½ÅÀº /lib, /usr/lib¿Í /usr/lib, /usr/local/libÀÇ ÇÏºÎ µð·ºÅä¸®¿¡¼­ ``cos''¸¦ ´ÙÀ½°ú °°ÀÌ Ã£À» ¼ö ÀÖ´Ù.
<programlisting>
nm -o /lib/* /usr/lib/* /usr/lib/*/* \
      /usr/local/lib/* 2> /dev/null | grep 'cos$' 
</programlisting>
</para>
<para>
nm¿¡ ´ëÇØ ´õ ¸¹Àº °ÍÀ» ¾Ë°í ½ÍÀ¸¸é <ulink url="info:binutils#nm">info:binutils#nm</ulink>¿¡ ``Á¤º¸'' ¹®¼­°¡ ÀÖµû.
</para>
</sect2>

<sect2 id="init-and-fini">
<title>Æ¯º°ÇÔ¼ö _init, _fini</title>
<para>
µÎ°³ÀÇ Æ¯º°ÇÑ ÇÔ¼ö°¡ ÃÊ±âÈ­¿Í Á¾°áÈ­ÀÇ ¸ðµÑÀ» µ½´Â´Ù:_init¿Í _fini. ``_init''ÇÔ¼ö°¡ ¶óÀÌºê·¯¸®¿¡ ÀÇÇØ ³»º¸³»Áø´Ù¸é, ¶óÀÌºê·¯¸®°¡ Ã³À½¿¡ ¿­¾îÁú¶§ ºÒ¸±°ÍÀÌ´Ù(dlopen()ÀÌ³ª °øÀ¯¶óÀÌºê·¯¸®ÀÇ ÇüÅÂ·Î). C ÇÁ·Î±×·¥¿¡¼­, ÀÌ°ÍÀº ´ç½ÅÀÌ _initÀÌ¶õ ÀÌ¸§ÀÌ ºÙÀº ¾î¶² ÇÔ¼ö¸¦ Á¤ÀÇÇß´Ù´Â °ÍÀ» ÀÇ¹ÌÇÑ´Ù. ÀÌ°Í¿¡ ´ëÇÑ _finiÇÔ¼ö°¡ ÀÖ´Âµ¥, ÀÌ°ÍÀº Å¬¶óÀÌ¾ðÆ®°¡ ¶óÀÌºê·¯¸® »ç¿ëÀ» ³¡³¾¶§ ºÒ¸®´Â ÇÔ¼öÀÌ´Ù(0³ª ÇÁ·Î±×·¥ÀÇ Á¤»óÁ¾·á¸¦ °¡Á®¿À´Â dlclose()ÀÇ ÇüÅÂ·Î). ÀÌ ÇÔ¼öÀÇ C ÇÁ·ÎÅäÅ¸ÀÔÀº ´ÙÀ½°ú °°´Ù:
<programlisting>
  void _init(void);
  void _fini(void);
</programlisting>
</para>

<para>
``.o''ÆÄÀÏÀ» gcc¿¡¼­ ÄÄÆÄÀÏ ÇÒ ¶§, ``-nostartfiles''¿É¼ÇÀ» ³Ö¾î¶ó. ÀÌ°ÍÀº CÄÄÆÄÀÏ·¯°¡ .soÆÄÀÏ¿¡ ´ëÇØ ½Ã½ºÅÛ ½ÃÀÛ ¶óÀÌºê·¯¸®¸¦ ¸µÅ©ÇÏµµ·Ï ÇØÁØ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ´ç½ÅÀº ``multiple=definition''¿¡·¯¸¦ ¸¸³¯ °ÍÀÌ´Ù. Jim Mischel°ú Tim GentryÀÌ _init, _finiÇÔ¼ö¿¡ ´ëÇÑ ³íÀÇ¿¡¼­ ±ÛÀ» ¾²´Âµ¥ µµ¿òÀ» ÁáÀ» »Ó¸¸ ¾Æ´Ï¶ó ÀÌ·± Á¦¾ÈÀ» ÇØÁØ°Í¿¡ ÀÇÇØ °¨»çÇÑ´Ù.
</para>

</sect2>

<sect2 id="shared-scripts">
<title>°øÀ¯ ¶óÀÌºê·¯¸®´Â ½ºÅ©¸³Æ®°¡ µÉ ¼ö ÀÖ´Ù</title>
<para>
GNU ·Î´õ°¡ Æ¯º°ÇÑ ½ºÅ©¸³Æ® ¾ð¾î¸¦ ÅëÇØ º¸ÅëÀÇ ¶óÀÌºê·¯¸® Çü½Ä´ë½Å ÅØ½ºÆ® ÆÄÀÏÀÇ ÇüÅÂ·Î °øÀ¯ ¶óÀÌºê·¯¸®¸¦ À¯ÁöÇÏ°Ô ÇÏ´Â°ÍÀº ÀÇ¹Ì°¡ ¾ø´Ù. ÀÌ°ÍÀº °£Á¢ÀûÀ¸·Î ´Ù¸¥ ¶óÀÌºê·¯¸®¸¦ ÇÕÄ¡°Ô µÊÀ¸·Î¼­ À¯¿ëÇÏ´Ù. ¿¹¸¦µé¾î, ³ªÀÇ ½Ã½ºÅÛÁß ÇÏ³ª¿¡¼­ µ¹¾Æ°¡´Â <filename>/usr/lib/libc.so</filename>ÀÇ ¸®½ºÆ®°¡ ÀÖ´Ù:
<programlisting>
/* GNU ld script
   Use the shared library, but some functions are only in
   the static library, so try that secondarily.  */
GROUP ( /lib/libc.so.6 /usr/lib/libc_nonshared.a )
</programlisting>
</para>
<para>
ÀÌ°Í¿¡ ´ëÇØ ´õ ¸¹Àº Á¤º¸¸¦ ¾ò±âÀ§ÇØ ld¸µÄ¿ ½ºÅ©¸³Æ®¸¦ º¸¾Æ¶ó(ld¸í·É¾î). ÀÏ¹ÝÀûÀÎ Á¤º¸´Â info:ld#Options¿Í info:ld#Commands¿¡¼­ ¾òÀ»¼ö ÀÖ°í, info:ld#Option Commands¿¡¼­ ¸í·É¾îÀÇ Á¤º¸¸¦ ¾òÀ»¼ö ÀÖ´Ù.
</para>
</sect2>

<sect2 id="gnu-libtool">
<title>GNU libtool</title>
<para>
¸¸¾à ´ç½ÅÀÌ ´Ù¸¥ ¸¹Àº ½Ã½ºÅÛ¿¡ Æ÷ÆÃÇÒ ÀÀ¿ëÇÁ·Î±×·¥À» Á¦ÀÛÇÑ´Ù¸é, ´ç½ÅÀº ¶óÀÌºê·¯¸®¸¦ ¸¸µé°í ¼³Ä¡ÇÏ±â À§ÇØ <ulink url="http://www.gnu.org/software/libtool/libtool.html">GNU libtool</ulink>¸¦ »ç¿ëÇÏ´Â°ÍÀ» °í·ÁÇØ¾ß ÇÒ °ÍÀÌ´Ù. GNU libtoolÀº ½ºÅ©¸³Æ®¸¦ Áö¿øÇÏ´Â ÀÏ¹ÝÀûÀÎ ¶óÀÌºê·¯¸®ÀÌ´Ù. LibtoolÀº ÀÏ°üÀûÀÌ°í Æ÷ÆÃ°¡´ÉÇÑ ÀÎÅÍÆäÀÌ½º¼Ó¿¡ °øÀ¯¶óÀÌºê·¯¸®ÀÇ º¹Àâµµ¸¦ ÁÙ¿©ÁØ´Ù. LibtoolÀº ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé°í, (Á¤Àû, °øÀ¯)¶óÀÌºê·¯¸®¸¦ ¸µÅ©ÇÏ°í, ½ÇÇàÆÄÀÏÀ» ¸µÅ©ÇÏ°í, ½ÇÇàÆÄÀÏÀ» µð¹ö±×ÇÏ°í, ¶óÀÌºê·¯¸®¸¦ ¼³Ä¡ÇÏ°í, ½ÇÇàÆÄÀÏÀ» ¼³Ä¡ÇÏ´Âµ¥ Æ÷ÆÃ°¡´ÉÇÑ ÀÎÅÍÆäÀÌ½º¸¦ Á¦°øÇÑ´Ù. ÀÌ°ÍÀº ¶ÇÇÑ libltdlÀ» Æ÷ÇÔÇÏ´Âµ¥, µ¿Àû ÀûÀç ÇÁ·Î±×·¥ÀÇ Æ÷ÆÃ°¡´ÉÇÑ °¨½Î´Â ¿ªÇÒÀ» ÇÑ´Ù. ´õ ¸¹Àº Á¤º¸¸¦ À§ÇØ¼­ <ulink url="http://www.gnu.org/software/libtool/manual.html">http://www.gnu.org/software/libtool/manual.html</ulink>ÀÇ ¹®¼­¸¦ Âü°íÇÏ¶ó.
</para>

</sect2>

<sect2>
<title>°ø°£À» À§ÇØ ½Éº¼À» Á¦°ÅÇÏ±â</title>
<para>
»ý¼ºµÈ ÆÄÀÏ¿¡ Æ÷ÇÔµÇ´Â ¸ðµç ½Éº¼Àº µð¹ö±ë¿¡ À¯¿ëÇÏÁö¸¸, ³Ê¹« ¸¹Àº °ø°£À» Â÷ÁöÇÑ´Ù. ¸¸¾à °ø°£ÀÌ ÇÊ¿äÇÏ´Ù¸é, ±×°ÍµéÀÇ ÀÏºÎ¸¦ Áö¿ö¶ó.
</para>

<para>
ÃÖ¼±ÀÇ Á¢±Ù¹ýÀº ¿ÀºêÁ§Æ® ÆÄÀÏÀ» Á¤»óÀûÀ¸·Î »ý¼ºÇÏ°í, µð¹ö±ë°ú °Ë»ç¸¦ ¸ÕÀúÇÑ´Ù(ÀÌ°ÍµéÀ» °¡Áö°í µð¹ö±ë, °Ë»ç¸¦ ÇÏ´Â°ÍÀº ¸Å¿ì ÆíÇÏ´Ù). ±×¸®°í³ª¼­, ÇÁ·Î±×·¥À» ¿ÏÀüÈ÷ °Ë»çÇßÀ¸¸é, strip(1)À» »ç¿ëÇØ¼­ ½Éº¼µéÀ» Áö¿ö¶ó. strip(1) ¸í·ÉÀº ½Éº¼À» Áö¿ì´Âµ¥ ¸¹ÀÌ Æí¸®ÇÏ°Ô ÇØÁØ´Ù; ÀÚ¼¼ÇÑ°ÍÀº ±×°ÍÀÇ ¹®¼­¸¦ ÂüÁ¶ÇÏ¶ó.
</para>

<para>
´Ù¸¥, GNU ld¿é¼ÇÀÇ ´Ù¸¥ °ÍÀ¸·Î´Â ``-S''¿Í ``-s''°¡ ÀÖ´Ù; ``-S''´Â Ãâ·ÂÆÄÀÏ¿¡¼­ (¸ðµç ½Éº¼ÀÌ¾Æ´Ñ)µð¹ö°Å ½Éº¼ Á¤º¸¸¦ ºü¶ß¸°´Ù. ``-s''¿É¼ÇÀº Ãâ·ÂÆÄÀÏ¿¡ ¸ðµç ½Éº¼ Á¤º¸¸¦ ½á ³Ö´Â´Ù. ``-Wl, -S''¿Í ''-Wl,-s''·Î¼­ gcc¸¦ ÅëÇØ ÀÌ ¿É¼ÇÀ» ¾µ ¼ö ÀÖ´Ù. ´ç½ÅÀÌ Ç×»ó ½Éº¼À» Á¦°ÅÇÏ°í, ÀÌ ¿É¼ÇÀÌ ºÒÇÊ¿äÇÑ°ÍÀÌ¶ó¸é, ±×³É ÆíÇÏ°Ô ´À²¸¶ó. ÇÏÁö¸¸, ÀÌ°ÍÀº ´ú À¯¿¬ÇÑ ¹æ¹ýÀÏ °ÍÀÌ´Ù.
</para>


</sect2>

<sect2>
<title>¸Å¿ì ÀÛÀº ½ÇÇàÈ­ÀÏµé</title>
<para>
´ç½ÅÀº <ulink url="http://www.muppetlabs.com/~breadbox/software/tiny/teensy.html">Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux</ulink>¹®¼­°¡ À¯¿ëÇÏ´Ù´Â °ÍÀ» ¾Ë°ÍÀÌ´Ù. ÀÌ°ÍÀº ¸Å¿ìÀÛÀº ÇÁ·Î±×·¥µéÀÌ ¾î¶»°Ô ¸¸µå´ÂÁö ¼³¸íÇÑ´Ù. »ç½Ç, ÀÏ¹ÝÀûÀÎ »óÈ²¿¡¼­ ÀÌ·± Æ®¸¯À» »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀº ELF°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö º¸¿©ÁÖ´Â ÁÁÀº¿¹ÀÌ´Ù.
</para>
</sect2>

<sect2>
<title>C++ÃÊ±âÈ­ ¼Óµµ ³ôÀÌ±â</title>
<para>
KDE °³¹ßÀÚ´Â ¸¹ÀÌ Àç ¹èÄ¡¸¦ ÇØ¾ßÇÏ°Ô¶§¹®¿¡ Å« GUI C++ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÏ´Âµ¥ ¿À·¡°É¸°´Ù´Â °ÍÀ» ¾È´Ù. ÀÌ°Í¿¡ ¿©·¯°¡Áö ÇØ°áÃ¥ÀÌ ÀÖ´Ù. ´õ ¸¹Àº Á¤º¸¸¦ À§ÇØ <ulink url="http://www.suse.de/~bastian/Export/linking.txt">Making C++ ready for the desktop (by Waldo Bastian)</ulink>¸¦ Âü°íÇÏ¶ó.
</para>
</sect2>
</sect1>

<sect1 id="more-examples">
<title>±×¿ÜÀÇ ¿¹Á¦µé</title>
<para>
´ÙÀ½ÀÇ ¿¹Á¦µéÀº ¸ðµç 3°¡Áö ¹æ¹ýµé(Á¤Àû, °øÀ¯, µ¿Àû ÀûÀç ¶óÀÌºê·¯¸®)ÀÇ ¿¹Á¦µéÀÌ´Ù. libhello.c´Â º¸ÅëÀÇ ¶óÀÌºê·¯¸®ÀÌ°í, libhello.h´Â Çì´õÆÄÀÏÀÌ´Ù. demo_use.c´Â º¸ÅëÀÇ ¶óÀÌºê·¯¸® È£Ãâ ÆÄÀÏÀÌ´Ù. ´ÙÀ½À¸·Î, Á¤Àû, °øÀ¯ ¶óÀÌºê·¯¸®¸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö º¸¿©ÁÖ´Â script_static, script_dynamic ½ºÅ©¸³Æ®°¡ ³ª¿Â´Ù. ±×¸®°í, °øÀ¯ ¶óÀÌºê·¯¸®¸¦ µ¿Àû ÀûÀç ¶óÀÌºê·¯¸®·Î ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö º¸¿©ÁÖ´Â demo_dynamic.c, script_dynamicÀÌ ³ª¿Â´Ù.
</para>

<!-- BEGINNING OF demo.sgml -->

<sect2>
<title>File libhello.c</title>
<para>
<programlisting>
<![CDATA[
/* libhello.c - demonstrate library use. */

#include <stdio.h>

void hello(void) {
  printf("Hello, library world.\n");
}

]]>
</programlisting>
</para>
</sect2>
<sect2>
<title>File libhello.h</title>
<para>
<programlisting>
<![CDATA[
/* libhello.h - demonstrate library use. */


void hello(void);

]]>
</programlisting>
</para>
</sect2>
<sect2>
<title>File demo_use.c</title>
<para>
<programlisting>
<![CDATA[
/* demo_use.c -- demonstrate direct use of the "hello" routine */

#include "libhello.h"

int main(void) {
 hello();
 return 0;
}
]]>
</programlisting>
</para>
</sect2>
<sect2>
<title>File script_static</title>
<para>
<programlisting>
<![CDATA[
#!/bin/sh
# Static library demo

# Create static library's object file, libhello-static.o.
# I'm using the name libhello-static to clearly
# differentiate the static library from the
# dynamic library examples, but you don't need to use
# "-static" in the names of your
# object files or static libraries.

gcc -Wall -g -c -o libhello-static.o libhello.c

# Create static library.

ar rcs libhello-static.a libhello-static.o

# At this point we could just copy libhello-static.a
# somewhere else to use it.
# For demo purposes, we'll just keep the library
# in the current directory.

# Compile demo_use program file.

gcc -Wall -g -c demo_use.c -o demo_use.o

# Create demo_use program; -L. causes "." to be searched during
# creation of the program.  Note that this command causes
# the relevant object file in libhello-static.a to be
# incorporated into file demo_use_static.

gcc -g -o demo_use_static demo_use.o -L. -lhello-static

# Execute the program.

./demo_use_static
]]>
</programlisting>
</para>
</sect2>
<sect2>
<title>File script_shared</title>
<para>
<programlisting>
<![CDATA[
#!/bin/sh
# Shared library demo

# Create shared library's object file, libhello.o.

gcc -fPIC -Wall -g -c libhello.c

# Create shared library.
# Use -lc to link it against C library, since libhello
# depends on the C library.

gcc -g -shared -Wl,-soname,libhello.so.0 \
    -o libhello.so.0.0 libhello.o -lc

# At this point we could just copy libhello.so.0.0 into
# some directory, say /usr/local/lib.

# Now we need to call ldconfig to fix up the symbolic links.
 
# Set up the soname.  We could just execute:
# ln -sf libhello.so.0.0 libhello.so.0
# but let's let ldconfig figure it out.

/sbin/ldconfig -n .

# Set up the linker name.
# In a more sophisticated setting, we'd need to make
# sure that if there was an existing linker name,
# and if so, check if it should stay or not.

ln -sf libhello.so.0 libhello.so

# Compile demo_use program file.

gcc -Wall -g -c demo_use.c -o demo_use.o

# Create program demo_use.
# The -L. causes "." to be searched during creation
# of the program; note that this does NOT mean that "."
# will be searched when the program is executed.

gcc -g -o demo_use demo_use.o -L. -lhello

# Execute the program.  Note that we need to tell the program
# where the shared library is, using LD_LIBRARY_PATH.

LD_LIBRARY_PATH="." ./demo_use

]]>
</programlisting>
</para>
</sect2>
<sect2>
<title>File demo_dynamic.c</title>
<para>
<programlisting>
<![CDATA[
/* demo_dynamic.c -- demonstrate dynamic loading and
   use of the "hello" routine */


/* Need dlfcn.h for the routines to
   dynamically load libraries */
#include <dlfcn.h>

#include <stdlib.h>
#include <stdio.h>

/* Note that we don't have to include "libhello.h".
   However, we do need to specify something related;
   we need to specify a type that will hold the value
   we're going to get from dlsym(). */

/* The type "simple_demo_function" describes a function that
   takes no arguments, and returns no value: */

typedef void (*simple_demo_function)(void);


int main(void) {
 const char *error;
 void *module;
 simple_demo_function demo_function;

 /* Load dynamically loaded library */
 module = dlopen("libhello.so", RTLD_LAZY);
 if (!module) {
   fprintf(stderr, "Couldn't open libhello.so: %s\n",
           dlerror());
   exit(1);
 }

 /* Get symbol */
 dlerror();
 demo_function = dlsym(module, "hello");
 if ((error = dlerror())) {
   fprintf(stderr, "Couldn't find hello: %s\n", error);
   exit(1);
 }

 /* Now call the function in the DL library */
 (*demo_function)();

 /* All done, close things cleanly */
 dlclose(module);
 return 0;
}
]]>
</programlisting>
</para>
</sect2>
<sect2>
<title>File script_dynamic</title>
<para>
<programlisting>
<![CDATA[
#!/bin/sh
# Dynamically loaded library demo

# Presume that libhello.so and friends have
# been created (see dynamic example).

# Compile demo_dynamic program file into an object file.

gcc -Wall -g -c demo_dynamic.c

# Create program demo_use.
# Note that we don't have to tell it where to search for DL libraries,
# since the only special library this program uses won't be
# loaded until after the program starts up.
# However, we DO need the option -ldl to include the library
# that loads the DL libraries.

gcc -g -o demo_dynamic demo_dynamic.o -ldl

# Execute the program.  Note that we need to tell the
# program where get the dynamically loaded library,
# using LD_LIBRARY_PATH.

LD_LIBRARY_PATH="." ./demo_dynamic
]]>
</programlisting>
</para>
</sect2>
<!-- END OF demo.sgml -->
</sect1>

<sect1 id="info-sources">
<title>±× ¿ÜÀÇ Á¤º¸µé</title>
<para>
¶óÀÌºê·¯¸®¿¡ ´ëÇÑ À¯¿ëÇÑ Á¤º¸´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ´Ù:
<itemizedlist>
<listitem>
    <para>
    Daniel BarlowÀÇ ``The GCC HOWTO''. Æ¯º°È÷ ÀÌ HOWTO´Â ¶óÀÌºê·¯¸®¸¦ ¸¸µé°í ÁúÀÇÇÏ´Â ÄÄÆÄÀÏ·¯ ¿É¼ÇÀ» ´Ù·é´Ù. ÀÌ°ÍÀº ¿©±â¼­ ´Ù·çÁö ¸øÇÑ Á¤º¸¸¦ ´Ù·é´Ù. ÀÌ HOWTO´Â <ulink url="http://www.linuxdoc.org">http://www.linuxdoc.org</ulink>¿¡¼­ º¼ ¼ö ÀÖ´Ù.
</para></listitem>
<listitem>
    <para>
    TTS(the Tool Interface Standards)À§¿øÈ¸ÀÇ ``Executable and Linkable Format (ELF)''(ÀÌ ¹®¼­´Â »ç½Ç ÀÌ À§¿øÈ¸ÀÇ Æ÷ÆÃ°¡´ÉÇÑ Çü½Ä ½ºÆå v 1.1ÀÇ ÇÑ Ã©ÅÍÀÌ´Ù). ÀÌ°ÍÀº ELFÇü½Ä¿¡ °üÇÑ Á¤º¸¸¦ Á¦°øÇÏ°í, ELFÇü½Ä¿¡ °üÇÑ ÀÚ¼¼ÇÑ ¸¹Àº °ÍÀ» Á¦°øÇÑ´Ù. <ulink url="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ELF.doc.tar.gz">ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ELF.doc.tar.gz</ulink>¸¦ Âü°íÇÏ¶ó. ¸¸¾à MIT·ÎºÎÅÍ ÆÄÀÏÀ» ¾ò´Â´Ù¸é, Çü½ÄÀÌ ÀÌ»óÇÔ¿¡ ÁÖÀÇÇÏ¶ó; gunzip, untar¸¦ ÇÑ ÈÄ¿¡, ÀÌ¸§À» ``ps''ÆÄÀÏ·Î ¹Ù²Ù¸é, º¸ÅëÀÇ psÆÄÀÏÀÌ µÉ °ÍÀÌ´Ù.
</para></listitem>
<listitem>
    <para>
    Hongjui LuÀÇ ``ELF: From the Programmer's Perspective''. ÀÌ°ÍÀº ELF¿¡ ´ëÇØ ¸®´ª½º, GCC gccÀÇ ½ºÆå Á¤º¸¸¦ º¸¿©ÁØ´Ù. ¶ÇÇÑ ÀÌ ¹®¼­´Â <ulink url="ftp://tsx-11.mit.edu/pub/linux/packages/GCC/elf.ps.gz">ftp://tsx-11.mit.edu/pub/linux/packages/GCC/elf.ps.gz</ulink>¿¡¼­ ±¸ÇÒ ¼ö ÀÖ´Ù.
</para></listitem>
</itemizedlist>
</para>

</sect1>

<sect1 id="copyright">
<title>Copyright and License</title>
<para>
ÀÌ ¹®¼­´Â Copyright (C) 2000 David A. Wheeler¿¡ ÀÇÇØ ÀúÀÛ±ÇÀÌ ÀÖ´Ù. ÀÌ ¹®¼­´Â GNU General License(GPL)À» µû¸¥´Ù. ´ç½ÅÀº ÀÌ ¹®¼­¸¦ °øÂ¥·Î Àç ¹èÆ÷ ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¹®¼­ÀÇ ¼Ò½º¸¦ ``ÇÁ·Î±×·¥''°ú ÇÔ²² ¹ø¿ªÇÏ°í, ´ÙÀ½°ú °°Àº °ÍµéÀ» µû¸£¶ó.
<blockquote>
<para>
    ÀÌ ÇÁ·Î±×·¥Àº °øÂ¥ ¼ÒÇÁÆ®¿þ¾îÀÌ´Ù; ´ç½ÅÀº Àç¹èÆ÷ ÇÒ ¼ö ÀÖ°í Free Software Foundation¿¡¼­ ³ª¿Â GNU GPLÀÇ ¿ë¾î¸¦ »ç¿ëÇØ¼­ ¼öÁ¤ÇÒ ¼ö ÀÖ´Ù; ÀÌ ¹®¼­ÀÇ ¹öÀü 2³ª ±× ÀÌÈÄÀÇ ¹öÀü¿¡¼­.
</para>

<para>
    ÀÌ ÇÁ·Î±×·¥Àº À¯¿ëÇÒ °ÍÀÌ¶ó°í ¹Ù¶ó°í ¹èÆ÷µÈ´Ù. ÇÏÁö¸¸ ¾î¶² º¸Áõ¼­µµ ¾ø´Ù; »ó¾÷ÀûÀÌ°Å³ª Æ¯º°ÇÑ ¸ñÀû¿¡ ´ëÇÑ º¸ÁõÁ¶Â÷ ¾ø´Ù. ÀÚ¼¼ÇÑ°ÍÀº GNU GPLÀ» º¸¶ó.
</para>

<para>
    ÀÌ ÇÁ·Î±×·¥°ú ÇÔ²² GNU GPLÀÇ º¹»çº»À» ¹Þ¾ÒÀ» °ÍÀÌ´Ù; ±×·¸Áö ¾ÊÀ¸¸é the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA¿¡ ÆíÁö½á¶ó.
</para>
</blockquote>
</para>

<para>
ÀÌ°ÍµéÀº ´Ù¸¥ À¥»çÆ¼Æ®¿¡¼­ ¹Ì·¯¸µÀ» Çã¶ôÇÑ´Ù. ÇÏÁö¸¸, ´ÙÀ½°ÍµéÀ» ºÎÅ¹ÇÑ´Ù:
<itemizedlist>
<listitem>
    <para>
    ³ÊÀÇ ¹Ì·¯ »çÀÌÆ®°¡ ¿ø·¡ »çÀÌÆ®ÀÇ ¾÷±×·¹ÀÌµå¸¦ ÀÚµ¿ÀûÀ¸·Î ÇÏ°ÔÇÏ°í,
    </para>
</listitem>
<listitem>
    <para>
    ¿øº» »çÀÌÆ®<ulink url="http://www.dwheeler.com/program-library">http://www.dwheeler.com/program-library</ulink>°¡ ¾îµðÀÎÁö ÇÏÀÌÆÛ ÅØ½ºÆ®·Î °Ô½ÃÇÏ°í,
    </para>
</listitem>
<listitem>
    <para>ÀÛ°¡ÀÎ ³ª((David A. Wheeler) ¿¡°Ô ¾Ë·ÁÁÖ¾î¶ó.
</para></listitem>
</itemizedlist>
</para>


<para>
³ª¸¦ ÁÖ·Î ±ÍÂú°Ô ÇÏ´Â 2°¡ÁöÁßÀÇ ÇÏ³ª´Â Áö³ª°£ ¹ö±×µé¿¡ ´ëÇÑ ÀÌ¾ß±â¸¦ °è¼Ó ÇÏ´Â °ÍÀÌ´Ù. ´ç½ÅÀÌ ÀÌ ¹®¼­ÀÇ ¹Ì·¯¸µÀ» Á¦´ë·Î ÇÏ°í ÀÖ´Ù¸é, ³ª´Â ´ç½Å¿¡°Ô¼­ ¸î³âÀü¿¡ °íÃÄÁø ¹ö±×¿¡ °üÇÑ ¾ê±â¸¦ µèÁö ¾Ê¾Æµµ µÈ´Ù. ¿øº» »çÀÌÆ®¸¦ ¹Ì·¯ÇÑ´Ù¸é, »ç¿ëÀÚµéÀº ´ç½ÅÀÇ ¹Ì·¯»çÀÌÆ®°¡ »õ·Î¿î°ÍÀÎÁö Ã¼Å©ÇÒ ¼ö ÀÖ´Ù. ³ª´Â ¸Å¿ì º¸¾È ¹®Á¦¿¡ ½ÅÁßÇÏ±â¶§¹®¿¡ ÀÏ¹ÝÀûÀÎ ÀÎÅÍ³ÝÁ¢¼ÓÀº ÇÏÁö ¾Ê´Â´Ù; ¸¸¾à ÀÌ°ÍÀÌ ´ç½Å¿¡°Ô ¹®Á¦°¡ µÈ´Ù¸é, ´Ù¸¥ ¹æ¹ýÀ» Ã£¾Æ¼­, ´ç½ÅÀÇ È¯°æ¿¡¼­ ¶§¶§·Î Ã¼Å©¸¦ ÇÏ¸é¼­ ¾÷µ¥ÀÌÆ®¸¦ ÇÏ¶ó.
</para>

<para>
ÀÌ ¶óÀÌ¼¾½º¿¡ ÀÇÇØ, ´ç½ÅÀÌ ¹®¼­¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸, ´ç½ÅÀÌ ¾²Áö ¾ÊÀº°ÍÀ» ´ç½Å²¨¶ó°í ÇÒ ¼ö ¾ø´Ù(µû¶ó¼­, Ç¥ÀýÀÌ´Ù). ¶ÇÇÑ, °³Á¤ÆÇÀÌ ¿øº»°ú °°Àº°ÍÀÌ¶ó°í ÇÒ ¼öµµ ¾ø´Ù. ÀÛ¾÷À» °³Á¤ÇÔÀ¸·Î¼­, ÀüºÎ°¡ ´ç½ÅÀÇ ÆÇ±ÇÀº ¾Æ´Ï´Ù; ÀÌ°ÍÀº ÆÇ±ÇÀÇ¹ý¿¡ ÀÇÇÑ ``°ø°øÀÇ''ÀÏÀº ¾Æ´Ï´Ù. ÀÚ¼¼ÇÑ°ÍÀº ¶óÀÌ¼¾½º¸¦ Ã£¾Æº¸¶ó, Æ¯º°È÷ ``´ç½ÅÀº ÆÄÀÏÀÌ ¹Ù²ï°Í¿¡´ëÇÑ Å« º¯È­¸¦ ¾²°í, ¾ðÁ¦ ¹Ù²î¾ú´ÂÁö °³Á¤µÈ ÆÄÀÏ¿¡ ¸í½ÃÇÏ¶ó''¶ó´Â °ÍÀ» ÁÖÀÇÇÏ¶ó. ¶óÀÌ¼¾½º°¡ ¹«¾ùÀ» Çã¿ëÇÏ´ÂÁö ¾Ë°í ½ÍÀ¸¸é, ³ª¿¡°Ô ¿¬¶ôÇÏ¶ó. ´ëºÎºÐÀÇ °æ¿ì, ´ç½ÅÀÌ ¹Ù²Û°ÍÀ» ÁÖ ÁýÇÊÀÚ(ÇöÀç´Â David A. Wheeler)¿¡°Ô º¸³»´Â °ÍÀÌ ÁÁ´Ù. ±×·¯¸é, ´ç½ÅÀÌ º¯È­½ÃÅ²°ÍÀÌ ¿øº»¿¡ Ãß°¡µÇ¾î¼­ ¸ðµç »ç¶÷ÀÌ º¸°Ô µÉ°ÍÀÌ´Ù.
</para>

</sect1>

</article>

