1. ¼Ò°³ÀÌ HOWTO¹®¼´Â ÇÁ·Î±×·¡¸ÓµéÀÌ ¸®´ª½º »ó¿¡¼ GNU ÇÁ·Î±×·¥À» »ç¿ëÇؼ ¾î¶»°Ô ¶óÀ̺귯¸®¸¦ ¸¸µé°í »ç¿ëÇÏ´ÂÁö¿¡ ´ëÇÑ ¹æ¹ýÀ» ³íÀÇÇÑ´Ù. ''ÇÁ·Î±×·¥ ¶óÀ̺귯¸®''´Â ³ªÁß¿¡ º» ÇÁ·Î±×·¥¿¡ ÅëÇÕµÉ ÄÄÆÄÀÏµÈ ÄÚµå(ÀÚ·á)¸¦ Æ÷ÇÔÇÏ°í ÀÖ´Â ÆÄÀÏÀÌ´Ù. ÇÁ·Î±×·¥ ¶óÀ̺귯¸®´Â ÇÁ·Î±×·¥ÀÌ ´õ ¸ðµâȵǰí, ÄÄÆÄÀÏÇϱ⠺ü¸£°Ô ÇÏ°í, ¾÷µ¥ÀÌÆ® Çϱ⠽±°Ô ¸¸µé¾îÁØ´Ù. ÇÁ·Î±×·¥ ¶óÀ̺귯¸®´Â 3°¡Áö ŸÀÔÀ¸·Î ³ª´¼ö ÀÖ´Ù: Á¤Àû ¶óÀ̺귯¸®(static library), °øÀ¯ ¶óÀ̺귯¸®(shared library), µ¿Àû ÀûÀç(DL)¶óÀ̺귯¸®(dynamically loaded library) ÀÌ ¹®¼´Â óÀ½À¸·Î ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ±â Àü¿¡ ½ÇÇà°¡´ÉÇÑ ÇÁ·Î±×·¥À¸·Î ¼³Ä¡µÇ´Â Á¤Àû ¶óÀ̺귯¸®¿¡ ´ëÇؼ ³íÀÇÇÏ°Ú´Ù. ±×¸®°í ³ª¼, ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§ ÀûÀçµÇ°í, ÇÁ·Î±×·¥»çÀÌ¿¡ °øÀ¯°¡ °¡´ÉÇÑ °øÀ¯ ¶óÀ̺귯¸®¿¡ ´ëÇؼ ³íÀÇÇÑ´Ù. ¸¶Áö¸·À¸·Î, ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ¶§ ¾ðÁ¦µçÁö ÀûÀçµÇ°í »ç¿ëµÉ ¼ö ÀÖ´Â µ¿Àû ÀûÀç ¶óÀ̺귯¸®¿¡ ´ëÇؼ ³íÀÇÇÑ´Ù. µ¿ÀûÀûÀç(DL) ¶óÀ̺귯¸®´Â ´Ù¸¥ ¹æ½ÄÀÇ ¶óÀ̺귯¸® Çü½Ä(format)°ú ´Ù¸£Áö ¾Ê´Ù. (Á¤Àû, °øÀ¯ ¶óÀ̺귯¸®µµ DL ¶óÀ̺귯¸®·Î »ç¿ëµÉ ¼ö ÀÖ´Ù); ±× ´ë½Å¿¡, DL ¶óÀ̺귯¸®´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô »ç¿ëµÇ´Â ¹æ¹ý¿¡ ÀÇÇØ Â÷ÀÌ°¡ ÀÖ´Ù. ÀÌ HOWTO ¹®¼´Â ´õ ¸¹Àº ¿¹Á¦°¡ ÀÖ´Â ´Ü¶ô, ´õ ¸¹Àº ¼Ò½ºÀÇ Âü°íÀÚ·á°¡ ÀÖ´Â ´Ü¶ôÀ» Æ÷ÇÔÇÑ´Ù. ¶óÀ̺귯¸®¸¦ °³¹ßÇÏ°í ÀÖ´Â °³¹ßÀÚµéÀº °øÀ¯ ¶óÀ̺귯¸®·Î ¸¸µé¾î¾ß ÇÑ´Ù. ¿Ö³ÄÇϸé, °øÀ¯¶óÀ̺귯¸®´Â ±× ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ°í ÀÖ´Â ÀÀ¿ë ÇÁ·Î±×·¥À¸·ÎºÎÅÍ ¶óÀ̺귯¸®¸¦ °³º°ÀûÀ¸·Î ¾÷µ¥ÀÌÆ® ÇÒ ¼ö Àֱ⠶§¹®ÀÌ´Ù. µ¿Àû ÀûÀç(DL) ¶óÀ̺귯¸®´Â À¯¿ëÇÏ´Ù. ÇÏÁö¸¸, »ç¿ëÇϱâ À§ÇØ ´õ ¸¹Àº ·®ÀÇ ÀÛ¾÷À» ÇÊ¿äÇÏ°í ¸¹Àº ÇÁ·Î±×·¥µéÀÌ ÀÌ ¶óÀ̺귯¸®°¡ Á¦°øÇÏ´Â À¯¿¬¼ºÀ» ÇÊ¿ä·Î ÇÏÁö ¾Ê´Â´Ù. ¹Ý´ë·Î, Á¤Àû ¶óÀ̺귯¸®´Â ¶óÀ̺귯¸®¸¦ ¾÷µ¥ÀÌÆ® Çϴ°ÍÀÌ ´õ ¾î·Æ±â ¶§¹®¿¡ ÀϹÝÀûÀÎ ¸ñÀûÀ¸·Î »ç¿ëµÇ´Â ÇÁ·Î±×·¥¿¡´Â ÃßõÇϱâ Èûµé´Ù. ±×·¡µµ, °¢°¢Àº ±×µéÀÇ ÀåÁ¡À» °¡Áö°í ÀÖ°í, °¢°¢ÀÇ Å¸ÀÔ¿¡ ´ëÇÑ ÀåÁ¡Àº ±× ŸÀÔÀ» ¼³¸íÇÏ´Â ¼½¼Çµé¿¡¼ ³íÀÇµÉ °ÍÀÌ´Ù. °øÀ¯ ¶óÀ̺귯¸®¸¦ DLL(Dynamic Linked Library)¶ó°í Çϰųª, DL¶óÀ̺귯¸®·Î »ç¿ëµÇ´Â ¶óÀ̺귯¸®¿¡ ´ëÇØ DLLÀ̶ó°í Çϰųª, À§ÀÇ µÎ°¡Áö »óȲ¿¡ ¸Â´Â ¶óÀ̺귯¸®¸¦ DLLÀ̶ó°í ÇÏ´Â °ÍÀº ÀÇ¹Ì ¾ø´Â ÀÏÀÌ´Ù. ´ç½ÅÀÌ À§ÀÇ °ÍµéÁß ¾î´À Àǹ̸¦ °í¸£´õ¶ó°í, ÀÌ HOWTO ¹®¼´Â ¸®´ª½º »ó¿¡¼ µ¹¾Æ°¡´Â DLLs¸¦ ´Ù·ê °ÍÀÌ´Ù. ÀÌ HOWTO¹®¼´Â ¿À´Ã³¯ ´ëºÎºÐÀÇ ¸®´ª½º ¹èÆ÷ÆÇ¿¡¼ »ç¿ëµÇ´Â Çü½ÄÀÎ ½ÇÇà, ¿¬°á Çü½Ä(ELF : Executable and Linking Format)¿¡ ´ëÇؼ ´Ù·ê°ÍÀÌ´Ù. GNU gcc´Â »ç½Ç ELFÀÌ¿Ü¿¡ ´õ ¸¹Àº ¶óÀ̺귯¸®¸¦ ´Ù·é´Ù; Ưº°È÷, ´ëºÎºÐÀÇ ¸®´ª½º ¹èÆ÷ÆÇÀº ¾ÆÁ÷±îÁöµµ Åð»öÇÑ a.outÇü½ÄÀ» »ç¿ëÇÑ´Ù. ±×·¯³ª, ±× Çü½ÄÀº ÀÌ ¹®¼ÀÇ ¹üÀ§¸¦ ¹þ¾î³´Ù. ¸¸¾à ´ç½ÅÀÌ ÇÁ·Î±×·¥À» ¸¹Àº ½Ã½ºÅÛ¿¡ Æ÷ÆÃÇÒ°ÍÀ̶ó¸é, ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÏ°í ¸¸µé±â À§Çؼ ¸®´ª½º ÅøÀ» Á÷Á¢ »ç¿ëÇϱ⺸´Ù GNU libtoolÀ» »ç¿ëÇÏ´Â °ÍÀ» °í·ÁÇ϶ó. GNU libtoolÀº ÀÏ°üµÇ°í, Æ÷Æð¡´ÉÇÑ ÀÎÅÍÆäÀ̽º¼Ó¿¡ °øÀ¯¶óÀ̺귯¸®ÀÇ º¹À⼺À» ¼û±â´Â ¿ªÇÒ(¿¹¸¦µé¾î, ¶óÀ̺귯¸®¸¦ ¸¸µé°í ¼³Ä¡ÇÏ´Â °Í)À» Áö¿øÇÏ´Â ÀϹÝÀûÀÎ ¶óÀ̺귯¸® Áö¿ø ½ºÅ©¸³Æ®ÀÌ´Ù. µ¿Àû ÀûÀç ¶óÀ̺귯¸®¸¦ À§ÇÑ Æ÷Æà ÀÎÅÍÆäÀ̽º¸¦ »ç¿ëÇϱâÀ§ÇØ, ´ç½ÅÀº ¸¹Àº Æ÷Æà ÅøÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù. GNU libtoolÀº ``libltdl''À̶ó´Â ÅøÀ» Æ÷ÇÔÇÑ´Ù. ±×¿Ü¿¡µµ, ´ç½ÅÀº ¸ðµâÀÇ µ¿Àû ÀûÀ縦 Áö¿øÇÏ´Â glib¶óÀ̺귯¸®(glibc¿Í È¥µ¿ÇÏÁö¸¶¶ó)¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. glib¿¡ ´ëÇؼ´Â http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.html¿¡¼ ´õ ¸¹ÀÌ Ã£¾Æ º¼ ¼ö ÀÖ´Ù. ´Ù½ÃÇѹø ¸»ÇÏÁö¸¸, ¸®´ª½º¿¡¼´Â ÀÌ·± ±â´ÉÀº ÀÌ HOWTO¿¡ ±â¼úµÈ ±¸¼º°³³äÀ¸·Î ±¸Çö µÉ ¼ö ÀÖ´Ù. ¸¸¾à ´ç½ÅÀÌ ¸®´ª½º¿¡¼ Äڵ带 °³¹ßÇϰųª µð¹ö±ë ÇÏ°í ÀÖ´Ù¸é, ´ç½ÅÀº ÀÌ HOWTOÀÇ Á¤º¸¸¦ ¿øÇÏ°í ÀÖÀ» °ÍÀÌ´Ù. ÀÌ HOWTOÀÇ º»·¡ÀÇ À§Ä¡´Â http://www.dwheeler.com/program-libraryÀÌ°í, Linux Documentation Project (http://www.linuxdoc.org)¿¡ ¿Ã¶ó°¡ ÀÖ´Ù. ÀúÀÛ±Ç(Copyright)´Â Copyright (C) 2000 David A. WheelerÀÌ°í, GPL ¶óÀ̼¾½º¸¦ µû¸¥´Ù; ´õ ¸¹Àº Á¤º¸¸¦ À§Çؼ ¸¶Áö¸· ¼½¼ÇÀ» Âü°íÇ϶ó. 2. Á¤Àû ¶óÀ̺귯¸®Á¤Àû ¶óÀ̺귯¸®´Â ´Ü¼øÈ÷ º¸ÅëÀÇ ¸ñÀûÆÄÀÏ(object file)ÀÇ ¸ðÀ½ÀÌ´Ù. °ü·ÊÀûÀ¸·Î, Á¤Àû ¶óÀ̺귯¸®´Â ``.a''ÀÇ È®ÀåÀÚ·Î ³¡³´Ù. ÀÌ°ÍÀº ar(archiver)ÇÁ·Î±×·¥¿¡ ÀÇÇؼ ¸¸µé¾îÁø´Ù. Á¤Àû ¶óÀ̺귯¸®´Â ³ªÁß¿¡ ¼³¸íµÉ °øÀ¯ ¶óÀ̺귯¸®ÀÇ ÀÌÁ¡µé ¶§¹®¿¡ ¿¹Àü¸¸Å ¸¹ÀÌ ¾²ÀÌÁö´Â ¾Ê´Â´Ù. ÇÏÁö¸¸, ¾ÆÁ÷µµ À̰͵éÀº ¸¸µé¾îÁö°í, ¿ª»çÀûÀ¸·Î óÀ½À¸·Î »ý°å°í, ¼³¸íÇϱ⿡ ½±´Ù. Á¤Àû ¶óÀ̺귯¸®´Â »ç¿ëÀÚµéÀÌ ÇÁ·Î±×·¥À» ´Ù½Ã ÄÄÆÄÀÏÇÏÁö ¾Ê¾Æµµ ¸µÅ©½Ãų¼ö ÀÖµµ·Ï ÇØÁֱ⠶§¹®¿¡, ÄÄÆÄÀÏ ½Ã°£À» ÁÙ¿©ÁØ´Ù. ¿À´Ã³¯ÀÇ ºü¸¥ ÄÄÆÄÀÏ·¯¸¦ º¸¸é Àç ÄÄÆÄÀÏ ½Ã°£Àº ±×´ÙÁö Áß¿äÇÑ ¿ä¼Ò°¡ ¾Æ´Ï±â ¶§¹®¿¡, ÀÌ°ÍÀº ¿¹Àü¸¸Å ÀÌÁ¡ÀÌ µÇÁö ¸øÇÑ´Ù. Á¤Àû ¶óÀ̺귯¸®´Â ÇÁ·Î±×·¡¸ÓµéÀÌ ¶óÀ̺귯¸®¸¦ ¸µÅ©ÇÏ°Ô´Â Çã¶ôÇÏ°í ½ÍÀºµ¥, ¼Ò½ºÄڵ带 °ø°³ÇÏ°í ½ÍÁö ¾ÊÀ» ¶§¿¡ À¯¿ëÇÏ´Ù(ÀÌ°ÍÀº ¶óÀ̺귯¸® ÆǸÅÀÚ¿¡°Ô À¯¿ëÇÒ ¼ö ÀÖ°ÚÁö¸¸, ÀÌ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ·Á´Â ÇÁ·Î±×·¡¸Ó¿¡°Ô´Â ÀÌÁ¡ÀÌ ¾Æ´Ï´Ù). ÀÌ·ÐÀûÀ¸·Î, ½ÇÇàÈÀÏ¿¡ ¸µÅ©µÇ´Â Á¤Àû ELF¶óÀ̺귯¸® ÄÚµå´Â °øÀ¯ ¶óÀ̺귯¸®³ª µ¿Àû ÀûÀç ¶óÀ̺귯¸®º¸´Ù 1-5%Á¤µµ ºü¸£°Ô µ¿ÀÛÇØ¾ß ÇÑ´Ù. ÇÏÁö¸¸, ½ÇÀçÀûÀ¸·Î ´Ù¸¥ ¸î¸î ¿ä¼Òµé ¶§¹®¿¡ ÀÌ·± Çö»óÀº °ÅÀÇ ³ªÅ¸³ªÁö ¾Ê°Ô µÈ´Ù. Á¤Àû ¶óÀ̺귯¸®¸¦ ¸¸µé°Å³ª, Á¸ÀçÇÏ´Â µ¿Àû ¶óÀ̺귯¸®¿¡ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» Ãß°¡Çϱâ À§Çؼ ´ÙÀ½°ú °°Àº ¸í·ÉÀ» »ç¿ëÇ϶ó:
ÀÌ ¿¹Á¦ ¸í·ÉÀº ¿ÀºêÁ§Æ® ÆÄÀÏ file1.o, file2.o¸¦ Á¤Àû ¶óÀ̺귯¸® my_library.a¿¡ Ãß°¡ÇÏ°í, ¸¸¾à my_library.a°¡ Á¸ÀçÇÏÁö ¾Ê´Â´Ù¸é ¸¸µå´Â °ÍÀÌ´Ù. Á¤Àû ¶óÀ̺귯¸®¸¦ ¸¸µå´Â °Í¿¡ ´ëÇØ ´õ ¸¹Àº Á¤º¸¸¦ º¸·Á¸é ar(1)À» ÂüÁ¶Ç϶ó. ´ç½ÅÀÌ Á¤Àû ¶óÀ̺귯¸®¸¦ ¸¸µé¾ú´Ù¸é, ±×°ÍÀ» »ç¿ëÇÏ°í ½Í¾î ÇÒ °ÍÀÌ´Ù. ´ç½ÅÀº ½ÇÇàÈÀÏÀ» ¸¸µé¶§, ÄÄÆÄÀÏ, ¸µÅ© °úÁ¤¿¡¼ Á¤Àû ¶óÀ̺귯¸®¸¦ ºÎ¸¦ ¼ö ÀÖ´Ù. ¸¸¾à ½ÇÇàÈÀÏÀ» ¸¸µé±â À§ÇØ gcc(1)À» »ç¿ëÇÑ´Ù¸é, ¶óÀ̺귯¸®¸¦ Ç¥½ÃÇϱâ À§ÇØ -l ¿É¼ÇÀ» »ç¿ëÇÒ ¼ö ÀÖ´Ù; ´õ ¸¹Àº Á¤º¸¸¦ À§ÇØ gcc¸¦ ã¾Æº¸¶ó. ¶ÇÇÑ, -l, -LµîÀÇ ¿É¼ÇÀ» Áö¿øÇÏ´Â ld(1) ¸µÄ¿¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù; ±×·¯³ª, ´ëºÎºÐÀÇ °æ¿ì ld(1)À» »ç¿ëÇÏ´Â °Íº¸´Ù gcc(1)À» »ç¿ëÇÏ´Â °ÍÀÌ ÁÁ´Ù. ld(1)ÀÌ ´õ ¸¹ÀÌ ¹Ù²î±â ¶§¹®ÀÌ´Ù. 3. °øÀ¯ ¶óÀ̺귯¸®°øÀ¯ ¶óÀ̺귯¸®´Â ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§ ÀûÀçµÇ´Â ¶óÀ̺귯¸®ÀÌ´Ù. °øÀ¯ ¶óÀ̺귯¸®°¡ Á¦´ë·Î ¼³Ä¡µÈ´Ù¸é, ±×´ÙÀ½¿¡ ½ÃÀÛÇÏ´Â ¸ðµç ÇÁ·Î±×·¥Àº ÀÚµ¿ÀûÀ¸·Î »õ °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ´Ù. ÀÌ°ÍÀº ÈξÀ ´õ À¯¿¬¼º ÀÖ°í, ¹ßÀüµÈ°ÍÀÌ´Ù. ¿Ö³ÄÇϸé, ¸®´ª½º¿¡¼ »ç¿ëÇÏ´Â ¹æ¹ýÀº ´ç½Å¿¡°Ô ´ÙÀ½°ú °°Àº °ÍµéÀ» Çã¿ëÇϱ⠶§¹®ÀÌ´Ù:
3.1. °ü·Êµé(Conventions)ÀÌ ¿øÇÏ´Â ¸ðµç ±â´ÉÀ» Áö¿øÇÏ´Â °øÀ¯ ¶óÀ̺귯¸®¿¡ ´ëÇØ, ¸¹Àº °ü·Ê¿Í ÁöħÀÌ µû¶óÁÖ¾î¾ß ÇÑ´Ù. ´ç½ÅÀº ¶óÀ̺귯¸®ÀÇ À̸§ÀÇ Â÷À̸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. Ưº°È÷, ºÒ¸®´Â À̸§``soname''°ú ½ÇÁ¦À̸§``real name''¿¡ ´ëÇؼ ¾Ë¾Æ¾ß ÇÑ´Ù(±×¸®°í À̰͵éÀÌ ¾î¶»°Ô »óÈ£ÀÛ¿ëÇÏ´ÂÁö¸¦). ´ç½ÅÀº ¶ÇÇÑ À̰͵éÀÌ ÆÄÀϽýºÅÛÀÇ ¾î´ÀºÎºÐ¿¡ À§Ä¡ÇÏ´ÂÁö ¾Ë¾Æ¾ß ÇÑ´Ù. 3.1.1. °øÀ¯ ¶óÀ̺귯¸® À̸§µé¸ðµç °øÀ¯ ¶óÀ̺귯¸®µéÀº ``ºÒ¸®´Â À̸§''À̶ó ºÒ¸®´Â Ưº°ÇÑ À̸§À» °¡Áö°í ÀÖ´Ù. ±× ºÒ¸®´Â À̸§Àº Á¢µÎ»ç ``lib'', ±× ¶óÀ̺귯¸® À̸§, ``.so''¿Í ÀÎÅÍÆäÀ̽º°¡ ¹Ù²ñ¿¡ µû¶ó Áõ°¡µÇ´Â ±â°£°ú ¹öÀü³Ñ¹ö·Î ÀÌ·ç¾îÁø´Ù(Ưº° ÄÉÀ̽º·Î, Àú ¼öÁØÀÇ C¶óÀ̺귯¸®´Â ``lib''À¸·Î À̸§ÀÌ ½ÃÀÛÇÏÁö ¾Ê´Â´Ù). ÃæºÐÈ÷ °ËÁõ¹ÞÀº(fully-qualified) ºÒ¸®´Â À̸§Àº ±× ¶óÀ̺귯¸®°¡ ¼ÓÇØÀÖ´Â µð·ºÅ丮¸¦ Á¢µÎ»ç·Î ÇÑ´Ù; ½ÇÁ¦ ½Ã½ºÅÛ¿¡¼ ÃæºÐÈ÷ °ËÁõ¹ÞÀº ºÒ¸®´Â À̸§Àº ``½ÇÁ¦À̸§''ÀÇ ½Éº¼¸¯ ¸µÅ©°¡ µÈ´Ù. ¸ðµç °øÀ¯ ¶óÀ̺귯¸®µéÀº ``½ÇÁ¦À̸§(realname)''À̶ó ºÒ¸®´Â ½ÇÁ¦ ¶óÀ̺귯¸® Äڵ带 Æ÷ÇÔÇÏ´Â ÆÄÀÏÀ̸§À» °¡Áö°í ÀÖ´Ù. ½ÇÁ¦ À̸§Àº ºÒ¸®´Â À̸§(soname)¿¡´Ù°¡ ±â°£, ¸¶ÀÌ³Ê ¼ýÀÚ, ¶Ç´Ù¸¥ ±â°£, Ãâ½Ã ¼ýÀÚ¸¦ Æ÷ÇÔÇÑ´Ù. ¸¶Áö¸·ÀÇ ±â°£°ú Ãâ½Ã ¼ýÀÚ´Â ¿É¼ÇÀÌ´Ù. ¸¶ÀÌ³Ê ¼ýÀÚ¿Í Ãâ½Ã ¼ýÀÚ´Â ´ç½ÅÀÌ ¶óÀ̺귯¸®ÀÇ ¾î¶² ¹öÀüÀ» ¾²°í ÀÖ´ÂÁö Á¤È®ÇÏ°Ô ¾Ë°Ô ÇÔÀ¸·Î¼ Çü»ó°ü¸®¸¦ ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù. ÀÌ ¼ýÀÚµéÀÌ »ç¿ëÀ» ½±°Ô ÇÑ´Ù ÇÏ´õ¶óµµ, ¶óÀ̺귯¸® ¹®¼¿¡ ¾²ÀΰͰú °°Àº ¼ýÀÚ°¡ ¾Æ´Ò ¼ö ÀÖ´Ù´Â Á¡¿¡ À¯ÀÇÇ϶ó. °Ô´Ù°¡, ÄÄÆÄÀÏ·¯°¡ ¶óÀ̺귯¸®¸¦ ¿ä±¸ÇÒ ¶§ »ç¿ëÇÏ´Â ´Ù¸¥ À̸§ÀÌ ÀÖ´Ù(³ª´Â ±×°ÍÀ» ``¸µÅ© À̸§(linker name)''À̶ó ¸íĪÇÒ °ÍÀÌ´Ù). ±×°ÍÀº ´ÜÁö ºÒ¸®´Â À̸§¿¡¼ ¼ýÀÚ¸¦ ¾ø¾Ø À̸§ÀÌ´Ù. °øÀ¯ ¶óÀ̺귯¸®¸¦ ´Ù·ç´Â ¹æ¹ýÀº ÀÌ À̸§µéÀÇ ±¸ºÐÀ» ÇÏ´Â °ÍÀÌ´Ù. ÇÁ·Î±×·¥ÀÌ ±×µéÀÌ ¿øÇÏ´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ ³»ºÎÀûÀ¸·Î ³ª¿ÇÑ´Ù¸é ±×°ÍµéÀº ±× ¶óÀ̺귯¸®µéÀÇ ºÒ¸®´Â À̸§¸¸ ³ª¿ÇØ¾ß ÇÑ´Ù. ¹Ý´ë·Î, ´ç½ÅÀÌ °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µç´Ù¸é, ´ç½ÅÀº ±× ¶óÀ̺귯¸®¸¦ ƯÁ¤ÇÑ ÆÄÀÏÀ̸§À¸·Î ¸¸µé¾î¾ß ÇÑ´Ù(´õ ÀÚ¼¼ÇÑ ¹öÀü Á¤º¸µé°ú ÇÔ²²). ´ç½ÅÀÌ »õ·Î¿î ¹öÀüÀÇ ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÑ´Ù¸é, ´ç½ÅÀº ±×°ÍÀ» »õ·Î¿î Ưº°ÇÑ µð·ºÅ丮¿¡´Ù ¼³Ä¡ÇÏ°í ldconfig(8)À» »ç¿ëÇؼ ÇÁ·Î±×·¥À» µ¹¸°´Ù. ldconfigÀº Á¸ÀçÇÏ´Â ÆÄÀÏÀ» Á¶»çÇÏ°í, /etc/ld.so.cacheÀÇ Ä³½Ã ÆÄÀÏÀ» ¼³Á¤Çϸé¼(Àá½ÃÈÄ¿¡ ¾ð±Þ µÉ °ÍÀÌ´Ù) ½ÇÁ¦ À̸§¿¡´Ù°¡ ºÒ¸®´Â À̸§À¸·Î ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µé¾îÁØ´Ù. ldconfig´Â ¸µÄ¿ À̸§À» ¸¸µéÁö´Â ¾Ê´Â´Ù; º¸Åë ÀÌ°ÍÀº ¶óÀ̺귯¸® ¼³Ä¡ÇÒ¶§ ¸¸µé¾îÁö°í, ¸µÄ¿ À̸§Àº ``°¡ÀåÃÖ±ÙÀÇ'' ºÒ¸®´Â À̸§(soname)À̳ª ½ÇÁ¦ À̸§(real name)À¸·Î ¸¸µé¾îÁø´Ù. ³ª´Â ¸µÄ¿ À̸§(linker name)À» ºÒ¸®´Â À̸§(soname)ÀÇ ½Éº¼¸¯ ¸µÅ©·Î »ç¿ëÇÒ °ÍÀ» ÃßõÇÑ´Ù. ¿Ö³ÄÇϸé, ´ëºÎºÐÀÇ °æ¿ì ´ç½ÅÀÌ ¶óÀ̺귯¸®¸¦ ¾÷µ¥ÀÌÆ® ÇÑ´Ù¸é, ´ç½ÅÀº ¸µÅ© ½Ãų¶§¿¡ ÀÚµ¿ÀûÀ¸·Î »ç¿ëÇÏ°í ½Í¾îÇÒ °ÍÀ̱⠶§¹®ÀÌ´Ù. ³ª´Â H. J. Lu¿¡°Ô ¿Ö ldconfig°¡ ÀÚµ¿ÀûÀ¸·Î ¸µÄ¿À̸§À» ¸¸µé¾îÁÖÁö ¾Ê³Ä°í ¹°¾îº¸¾Ò´Ù. ±×ÀÇ ¼³¸íÀº ÀÌ·¸´Ù. ¾Æ¸¶ ´ç½ÅÀ» ÃֽŹöÀüÀÇ ¶óÀ̺귯¸® Äڵ带 µ¹¸®°í ½Í¾îÇÒÁö ¸ð¸¥´Ù. ÇÏÁö¸¸, ±× ´ë½Å¿¡ ¿¹ÀüÀÇ(¾Æ¸¶µµ ȣȯµÇÁö ¾Ê´Â) ¹öÀüÀÇ ¶óÀ̺귯¸®·Î °³¹ßÇÏ°í ½Í¾îÇÒ ¼ö µµ ÀÖ´Ù. µû¶ó¼, ldconfig´Â ÇÁ·Î±×·¥ÀÌ ¾î¶² ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ °ÍÀÎÁö ¾î¶°ÇÑ °¡Á¤µµ ÇÏ°í ÀÖÁö ¾Ê´Ù. µû¶ó¼, ¼³Ä¡ÀÚ´Â ¸µÄ¿°¡ ¾î¶² ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ°ÍÀÌÁö¿¡ ´ëÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ Ưº°È÷ ¼öÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù. µû¶ó¼, /usr/lib/libreadline.so.3´Â /usr/lib/libreadline.so.3.0°ú °°Àº ½ÇÁ¦ À̸§¿¡ ldconfig¿¡ ÀÇÇØ ½Éº¼¸¯ ¸µÅ©°¡ µÈ ÃæºÐÈ÷ °ËÁõ¹ÞÀº ºÒ¸®´Â À̸§(soname)ÀÌ´Ù. /usr/lib/libreadline.so.3À» ½Éº¼¸¯ ¸µÅ©ÇÏ´Â /usr/lib/libreadline.so °°Àº ¸µÄ¿ À̸§(linker name)ÀÌ ÀÖÀ» ¼ö ÀÖ´Ù. 3.1.2. ÆÄÀÏ ½Ã½ºÅÛ ¹èÄ¡°øÀ¯ ¶óÀ̺귯¸®´Â ÆÄÀϽýºÅÛÀÇ ¾îµò°¡¿¡ À§Ä¡Çؾ߸¸ ÇÑ´Ù. ´ëºÎºÐÀÇ ¿ÀǼҽº ¼ÒÇÁÆ®¿þ¾î´Â GNUÇ¥ÁØÀ» µû¸¥´Ù; ´õ ¸¹Àº Á¤º¸¸¦ À§Çؼ´Â info:standards#Directory_Variables¸¦ ã¾Æº¸¾Æ¶ó. GNUÇ¥ÁØÀº ¼Ò½ºÄڵ带 ¹èÆ÷ÇÒ¶§ Ç¥ÁØÀ¸·Î ¸ðµç ¶óÀ̺귯¸®¸¦ /usr/local/lib¿¡ ¿Ã¸®±â¸¦ ÃßõÇÑ´Ù(±×¸®°í ¸ðµç ¸í·É¾î´Â /usr/local/bin¿¡ À§Ä¡Çϱ⸦ ÃßõÇÑ´Ù). ±×µéÀº ¶ÇÇÑ ÀÌ Ç¥ÁØÀ» ¿À¹ö¶óÀ̵åÇÏ°í, ÀνºÅç ¼ø¼¸¦ Á¤ÇØÁÖ±âÀ§ÇÑ °ü·Ê¸¦ Á¤ÀÇÇÑ´Ù. ÆÄÀϽýºÅÛ °èÃþ Ç¥ÁØ(FHS = Filesystem Hierarchy Standard)´Â ¹èÆ÷ÆÇÀÇ ¾îµð¿¡¼ ¹«¾ùÀ» ÇؾßÇÏ´ÂÁö ³íÀÇÇÑ´Ù(http://www.pathname.com/fhsÀ» ÂüÁ¶Ç϶ó). FHS¿¡ µû¸£¸é, ´ëºÎºÐÀÇ ¶óÀ̺귯¸®´Â /usr/lib¿¡ ÀνºÅç µÇ¾îÀÖ¾î¾ß¸¸ ÇÑ´Ù. ÇÏÁö¸¸, ½ÃÀ۽ÿ¡ ¿ä±¸µÇ´Â ¶óÀ̺귯¸®´Â /lib¿¡ ÀÖ¾î¾ß ÇÏ°í, ½Ã½ºÅÛÀÇ ÀϺΰ¡ ¾Æ´Ñ ¶óÀ̺귯¸®´Â /usr/local/lib¿¡ ÀÖ¾î¾ß ÇÑ´Ù. À§ÀÇ µÎ ¹®¼»çÀÌ¿¡ Á¤¸» Ãæµ¹ÀÌ ÀÖÁö´Â ¾Ê´Ù; GNUÇ¥ÁØÀº ¼Ò½ºÄÚµåÀÇ °³¹ßÀÚ¿¡°Ô ±âº»Àû°ÍµéÀ» ÃßõÇÑ´Ù. ¹Ý¸é¿¡, FHS´Â ¹èÆ÷ÀÚ(½Ã½ºÅÛ ÆÐÅ°Áö °ü¸® ½Ã½ºÅÛÀ» ÅëÇØ ¼Ò½ºÄÚµåÀÇ ±âº»ÀûÀÎ °ÍÀ» ¿À¹ö¶óÀ̵åÇÏ´Â »ç¶÷)¿¡°Ô ±âº»ÀûÀΰÍÀ» ÃßõÇÑ´Ù. ÀϹÝÀûÀ¸·Î ÀÌ°ÍÀº Àß µ¹¾Æ°£´Ù: ``ÃÖ±ÙÀÇ''(¾Æ¸¶µµ ¹ö±×°¡ ÀÖÀ»Áöµµ ¸ð¸£´Â!) ¼Ò½ºÄÚµå´Â ´ç½ÅÀÌ ´Ù¿î·ÎµåÇؼ ¼³Ä¡¸¦ Çϸé ``local''µð·ºÅ丮(/usr/local)¿¡ ¼³Ä¡µÉ °ÍÀÌ°í, ±× Äڵ尡 ÆÐÅ°Áö¸¦ ¹ßÀü½ÃÅ°¸é, °ü¸®ÀÚ´Â ¹èÆ÷ÆÇÀÇ Ç¥ÁØ À§Ä¡·Î ±× Äڵ带 Ç¥ÁØÀ¸·Î À§Ä¡½Ãų ¼ö ÀÖ´Ù. ¸¸¾à ´ç½ÅÀÇ ¶óÀ̺귯¸®°¡ ¶óÀ̺귯¸®¸¦ ÅëÇØ È£ÃâµÇ´Â ÇÁ·Î±×·¥À» È£ÃâÇÑ´Ù¸é, ´ç½ÅÀ» ±×·± ÇÁ·Î±×·¥À» /usr/local/libexec¿¡ ³õ¾Æ¾ß ÇÑ´Ù(¹èÆ÷ÆÇ¿¡¼´Â /usr/libexec°¡ µÈ´Ù). ÇϳªÀÇ º¹ÀâÇÑ Á¡Àº, Red HatÁ¾·ùÀÇ ½Ã½ºÅÛÀº ¶óÀ̺귯¸®ÀÇ Å½»ö½Ã¿¡ /usr/local/libÀ» ±âº»À¸·Î Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù; ¾Æ·¡ÀÇ /etc/ld.so.conf¿¡ ´ëÇÑ ³íÀǸ¦ º¸¶ó. ´Ù¸¥ Ç¥ÁØ ¶óÀ̺귯¸® À§Ä¡´Â X-windows¸¦ À§ÇÑ /usr/X11R6/libÀ» Æ÷ÇÔÇÑ´Ù. /lib/security´Â PAM ¸ðµâÀ» À§ÇÑ°ÍÀÌÁö¸¸, À̰͵éÀº DL¶óÀ̺귯¸®·Î ÀûÀçµÈ´Ù´Â °ÍÀ» ¸í½ÉÇ϶ó(À̰͵µ ¾Æ·¡¿¡¼ ³íÀǵȴÙ). 3.2. ¶óÀ̺귯¸® »ç¿ë ¹æ¹ýµé¸ðµç ¸®´ª½º ½Ã½ºÅÛÀ» Æ÷ÇÔÇÑ GNU glibc±â¹Ý ½Ã½ºÅÛ¿¡¼´Â, ELF ÀÌÁø ½ÇÇàÆÄÀÏÀÇ ½ÃÀÛÀº ÇÁ·Î±×·¥·Î´õ°¡ ÀûÀçµÇ°í ½ÇÇàµÈ ÈÄ¿¡ ÇÑ´Ù. ¸®´ª½º ½Ã½ºÅÛ¿¡¼´Â, ÀÌ ·Î´õ´Â /lib/ld-linux.so.X(¿©±â¼ X´Â ¹öÀü ¼ýÀÚ)¶ó´Â À̸§ÀÌ ºÙ´Â´Ù. ÀÌ ·Î´õ´Â ÇÁ·Î±×·¥¿¡¼ ¾²ÀÌ´Â ´Ù¸¥ ¸ðµç °øÀ¯ ¶óÀ̺귯¸®¸¦ ã¾ÆÁÖ°í ÀûÀç½ÃÄÑÁØ´Ù. Ž»öµÇ¾îÁø µð·ºÅ丮ÀÇ ¸®½ºÆ®´Â /etc/ld.so.conf¿¡ ÀúÀåµÈ´Ù. ¸¹Àº Red Hat±â¹Ý ¹èÆ÷ÆÇÀº ±âº»ÀûÀ¸·Î /usr/local/libÀ» /etc/ld.so.conf¿¡ ÀúÀåÇÏÁö ¾Ê´Â´Ù. ³ª´Â ÀÌ°ÍÀÌ ¹ö±×¶ó°í »ý°¢ÇÑ´Ù. ±×¸®°í, /etc/ld.so.conf¿¡ /usr/local/libÀ» Ãß°¡Çϴ°ÍÀº Red Hat±â¹Ý ½Ã½ºÅÛ¿¡¼ ¸¹Àº ÇÁ·Î±×·¥À» µ¹¸®±âÀ§ÇØ ¿ä±¸µÇ¾îÁø ÀϹÝÀûÀÎ ¼öÁ¤ÀÛ¾÷ÀÌ´Ù. ¶óÀ̺귯¸®¿¡ ¸î°³ÀÇ ÇÔ¼ö¸¦ Ãß°¡ÇÏ°í ½ÍÀºµ¥, ¶óÀ̺귯¸®ÀÇ ³ª¸ÓÁö ºÎºÐÀ» À¯ÁöÇÏ°í ½Í´Ù¸é, ¿À¹ö¶óÀ̵åÇÏ´Â ¶óÀ̺귯¸®ÀÇ À̸§(.oÆÄÀÏ)À» /etc/ld.so.preload¿¡ ³Ö¾î¶ó; ÀÌ ``¹Ì¸® ÀûÀçµÇ´Â'' ¶óÀ̺귯¸®´Â ±âº» ¼Â¿¡ ´ëÇØ ¿ì¼±¼øÀ§¸¦ °¡Áú°ÍÀÌ´Ù. ÀÌ ¹Ì¸® ÀûÀçµÇ´Â ÆÄÀÏÀº ÀϹÝÀûÀ¸·Î ±ä±ÞÆÐÄ¡¿¡ »ç¿ëµÈ´Ù; ¹èÆ÷ÆÇÀº ÀϹÝÀûÀ¸·Î Ãâ½ÃµÉ¶§ ±×·±ÆÄÀϵéÀ» Æ÷ÇÔÇÏÁö ¾Ê´Â´Ù. ÇÁ·Î±×·¥ ½ÃÀ۽ÿ¡ ÀÌ·± µð·ºÅ丮¸¦ ´Ù ã´Â°ÍÀº ¸Å¿ì ºñÈ¿À²ÀûÀÎ ÀÏÀÌ´Ù. µû¶ó¼, º¸Åë ij½Ì Á¤·ÄÀÌ »ç¿ëµÈ´Ù. ldconfig(8)Àº ±âº»À¸·Î /etc/ld.so.conf¸¦ ÀÐ°í µ¿Àû ¸µÅ© µð·ºÅ丮µé(Ç¥ÁØ °ü·Ê¸¦µû¸£´Â)¿¡¼ ÀûÀýÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µé°í, /etc/ld.so.cache¿¡ ij½Ã¸¦ ½á ³ÖÀ¸¸é, ´Ù¸¥ ÇÁ·Î±×·¥¿¡¼ »ç¿ëµÈ´Ù. ÀÌ°ÍÀº ¶óÀ̺귯¸® Á¢±ÙÀÇ ¼Óµµ¸¦ ³ô¿©ÁØ´Ù. °ü·ÃµÈ°ÍÀº DLLÀÌ Ãß°¡µÇ°Å³ª »èÁ¦µÇ°Å³ª DLLµð·ºÅ丮°¡ º¯ÇÒ¶§µµ ldconfigÀÌ ÀÛµ¿ÇØ¾ß ÇÑ´Ù´Â °ÍÀÌ´Ù; ldconfig¸¦ µ¿ÀÛ½ÃÅ°´Â °ÍÀº ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÒ¶§ ÆÐÅ°Áö °ü¸®ÀÚ°¡ ¼öÇàÇؾßÇÒ ÀÛ¾÷ Áß ÇϳªÀÌ´Ù. ±×¸®°í³ª¼, ½ÃÀ۽ÿ¡ µ¿Àû ·Î´õ°¡ /etc/ld.so.cache¸¦ »ç¿ëÇÏ°í ÇÊ¿äÇÑ ¶óÀ̺귯¸®¸¦ ·ÎµåÇÑ´Ù. ±×·±µ¥, FreeBSD´Â ÀÌ Ä³½Ã¸¦ À§ÇØ ´Ù¸¥ ÆÄÀÏÀ̸§À» »ç¿ëÇÑ´Ù. FreeBSD¿¡¼´Â, ELF ij½Ã´Â /var/run/ld-elf.so.hintsÀÌ°í a.out ij½Ã´Â /var/run/ld.so.hintsÀÌ´Ù. À̰͵éÀº ldconfig(8)¿¡ ÀÇÇؼ ¾÷µ¥ÀÌÆ®µÈ´Ù. µû¶ó¼, ¸î¸î ´Ù¸¥ »óȲµé¿¡¼¸¸ ÀÌ Àå¼ÒÀÇ Â÷ÀÌ°¡ ¹®Á¦°¡ µÈ´Ù. 3.3. ȯ°æ º¯¼öµé¿©·¯°¡Áö ȯ°æº¯¼ö´Â ÀÌ °úÁ¤À» Á¦¾îÇÒ ¼ö ÀÖ´Ù. ±×¸®°í ÀÌ °úÁ¤À» ¿À¹ö¶óÀ̵åÇϴ ȯ°æº¯¼öµéÀÌ Á¸ÀçÇÑ´Ù. 3.3.1. LD_LIBRARY_PATHÀÌ Æ¯º°ÇÑ ½ÇÇàÀ» À§ÇØ ´ç½ÅÀº ÀϽÃÀûÀ¸·Î ´Ù¸¥ ¶óÀ̺귯¸®¸¦ ´ëüÇÒ ¼ö ÀÖ´Ù. ¸®´ª½º¿¡¼, ȯ°æº¯¼ö LD_LIBRARY_PATH´Â Ç¥ÁØÀÇ µð·ºÅ丮µéÀ» ã±âÀü¿¡ ã¾Æº¸°ÔµÇ´Â ¶óÀ̺귯¸®ÀÇ µð·ºÅ丮µéÀÇ ÄÝ·ÐÀ¸·Î ±¸ºÐµÇ´Â ¼ÂÀÌ´Ù; ÀÌ°ÍÀº »õ ¶óÀ̺귯¸®³ª Ưº°È÷ Á¦ÀÛÇÑ Ç¥ÁØÀÌ ¾Æ´Ñ ¶óÀ̺귯¸®¸¦ µð¹ö±ëÇÒ¶§ À¯¿ëÇÏ´Ù. ȯ°æº¯¼ö LD_PRELOAD´Â /etc/ld.so.preload°¡ ÇÏ´Â °Íó·³ Ç¥ÁØ ¼ÂÀ» ¿À¹ö¶óÀ̵åÇÏ´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ ÇÔ¼ö¿Í ÇÔ²² ³ª¿ÇÑ´Ù. À̰͵éÀº /lib/ld-linux.so¶ó´Â ·Î´õ¿¡ ÀÇÇØ ±¸ÇöµÈ´Ù. LD_LIBRARY_PATH°¡ ¸¹Àº À¯´Ð½º ½Ã½ºÅÛ¿¡¼ ÀÛµ¿ÇÏ´Â ¹Ý¸é ¸ðµç ½Ã½ºÅÛ¿¡¼ ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù´Â °ÍÀ» ¸»ÇÏ°í ½Í´Ù; ¿¹¸¦µé¾î, HU-UX¿¡¼´Â ÀÌ ±â´ÉÀÌ È¯°æº¯¼ö SHLIB_PATH¿¡ ÀÇÇؼ °¡´ÉÇÏ°í, AIX¿¡¼´Â LIBPATH¿¡ ÀÇÇØ °¡´ÉÇÏ´Ù(°°Àº ¹®¹ý°ú, ÄÝ·ÐÀ¸·Î ±¸ºÐµÇ´Â ¸®½ºÆ®·Î °¡´ÉÇÏ´Ù). LD_LIBRARY_PATH´Â °³¹ß°ú °Ë»ç¸¦ À§ÇØ Æí¸®ÇÏ´Ù. ±×·¯³ª º¸ÅëÀÇ À¯ÀúÀÇ º¸ÅëÀÇ »ç¿ëÀ» À§Çؼ ¼³Ä¡ °úÁ¤¿¡¼ º¯°æµÇ¸é ¾ÈµÈ´Ù; ¿Ö ±×·±Áö´Â http://www.visi.com/~barr/ldpath.htmlÀÇ ``Why LD_LIBRARY_PATH is Bad''¿¡¼ ã¾Æº¸¶ó. ÇÏÁö¸¸, ÀÌ ±â´ÉÀº ¿©ÀüÈ÷ °³¹ß°ú °Ë»ç¸¦ À§ÇØ À¯¿ëÇÏ°í, ´Ù¸¥¹æ½ÄÀ¸·Î ÇØ°áÇÏÁö ¸øÇÏ´Â °ÍÀ» ÇØ°áÇϴµ¥ À¯¿ëÇÏ´Ù. ¸¸¾à ´ç½ÅÀÌ È¯°æº¯¼ö LD_LIBRARY_PATH¸¦ ¼³Á¤ÇÏ°í ½ÍÁö ¾Ê´Ù¸é, ¸®´ª½º¿¡¼ ´ç½ÅÀº ÇÁ·Î±×·¥ ·Î´õ¸¦ Á÷Á¢ ºÒ·¯¼ ÀÎÀÚ¸¦ ³Ñ°ÜÁÙ¼öµµ ÀÖ´Ù. ¿¹¸¦µé¾î, ´ÙÀ½Àº ȯ°æº¯¼ö LD_LIBRARY_PATHÀÇ °æ·Î ÀÌ¿ÜÀÇ ÁÖ¾îÁø PATH¸¦ »ç¿ëÇÒ °ÍÀÌ°í, ½ÇÇà°¡´É ÇÁ·Î±×·¥À» µ¹¸± °ÍÀÌ´Ù.
3.3.2. LD_DEBUGGNU C¿¡¼ ¶Ç´Ù¸¥ À¯¿ëÇÑ È¯°æº¯¼ö´Â LD_DEBUGÀÌ´Ù. ÀÌ°ÍÀº dl* ÇÔ¼ö¸¦ À§ÇØ ¸¸µé¾îÁ³´Ù. µû¶ó¼ ±×µéÀÌ ÇÏ°í ÀÖ´Â °Íµé¿¡ ´ëÇÑ ¸Å¿ì ÀåȲÇÑ Á¤º¸¸¦ ÁØ´Ù. ¿¹¸¦ º¸ÀÚ:
LD_DEBUG¸¦ ``help''·Î ¼³Á¤ÇÏ°í ÇÁ·Î±×·¥À» µ¹¸®¸é ¿©·¯°¡Áö ¿É¼ÇÀ» Ç¥½ÃÇÒ °ÍÀÌ´Ù. ´Ù½Ã, LD_DEBUG´Â º¸ÅëÀÇ »ç¿ëÀ» À§ÇØ ÀÖ´Â °ÍÀÌ ¾Æ´Ï¶ó, µð¹ö±ë°ú °Ë»ç¸¦ À§ÇØ Æí¸®ÇÑ °ÍÀÌ´Ù. 3.3.3. ´Ù¸¥ ȯ°æ º¯¼öµé·Îµù°úÁ¤À» Á¦¾îÇÒ ¼ö ÀÖ´Â ¸¹Àº ȯ°æº¯¼öµéÀÌ ÀÖ´Ù; ±×°ÍµéÀÇ À̸§Àº LD_³ª RTLD_·Î ½ÃÀÛÇÑ´Ù. ´ëºÎºÐÀÇ ´Ù¸¥ ȯ°æº¯¼öµéÀº ·Î´õ ÇÁ·Î¼¼½ºÀÇ Àú ¼öÁØÀÇ µð¹ö±ëÀ̳ª Ưº°ÇÑ ¿ëµµÀÇ ±¸ÇöÀ» À§ÇØ Á¸ÀçÇÑ´Ù. ±×°Íµé ´ëºÎºÐÀº ¹®¼È°¡ Àß µÇ¾îÀÖÁö ¾Ê´Ù; ´ç½ÅÀÌ ±×°Íµé¿¡ ´ëÇØ ¾Ë°í ½Í¾îÇÑ´Ù¸é ÃÖ»óÀÇ ¹æ¹ýÀº ·Î´õÀÇ ¼Ò½ºÄڵ带 Àд °ÍÀÌ´Ù(gccÀÇ ÀϺÎ). Ưº°ÇÑ Á¶Ä¡°¡ ÃëÇØÁöÁö ¾Ê´Â´Ù¸é, µ¿Àû ¿¬°á ¶óÀ̺귯¸®¿¡ »ç¿ëÀÚÀÇ ±ÇÇÑÀ» Çã¶ôÇÏ´Â °ÍÀº 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ÇÁ·Î±×·¥ÀÌ È¯°æº¯¼öµé¿¡ ÀÇÇØ ³ª»Ú°Ô ó¸®µÇ¸é ¾ÈµÈ´Â ÀÌÀ¯ÀÌ´Ù. 3.4. °øÀ¯ ¶óÀ̺귯¸® ¸¸µé±â°øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µå´Â °ÍÀº ½±´Ù. óÀ½À¸·Î, gcc-fPIC³ª fpicÇ÷¡±×¸¦ »ç¿ëÇؼ °øÀ¯ ¶óÀ̺귯¸®·Î »ç¿ëµÉ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé¾î¶ó. -fPIC³ª -fpic¿É¼ÇÀº ``À§Ä¡¿¡ µ¶¸³ÀûÀÎ ÄÚµå''¸¦ ¸¸µé¾îÁÖ°í, °øÀ¯ ¶óÀ̺귯¸®ÀÇ Á¶°ÇÀ» ¸¸Á·½ÃŲ´Ù; ¾Æ·¡ÀÇ Â÷ÀÌÁ¡À» º¸¶ó. ±×¸®°í ÀÌ Çü½ÄÀ» µû¶ó¼ °øÀ¯¶óÀ̺귯¸®¸¦ ¸¸µé¾î¶ó:
µÎ°³ÀÇ ¿ÀºêÁ§Æ® ÆÄÀÏ(a.o, b.o)¸¦ ¸¸µé°í ÀÌ°Íµé ¸ðµÎ¸¦ Æ÷ÇÔÇÏ´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µå´Â ¿¹Á¦ÀÌ´Ù. ÄÄÆÄÀÏÀÌ µð¹ö±× Á¤º¸(-g)¿Í °æ°íÁ¤º¸(-Wall)¸¦ Æ÷ÇÔÇϴµ¥, À̰͵éÀº °øÀ¯¶óÀ̺귯¸®¸¦ À§ÇØ ÇÊ¿äÇÑ°ÍÀº ¾Æ´ÏÁö¸¸, ÃßõµÇ´Â Á¤º¸¶ó´Â °ÍÀ» ÁÖÀÇÇ϶ó. ÄÄÆÄÀÏÀº ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé°í(-c), -fPIC¿É¼ÇÀ» ¿ä±¸ÇÑ´Ù.
ÁÖÀÇÇÒ ¸¸ÇÑ °¡Ä¡°¡ ÀÖ´Â °ÍµéÀÌ ÀÖ´Ù:
°³¹ß°úÁ¤µ¿¾È, ´Ù¸¥ ¸¹Àº ÇÁ·Î±×·¥¿¡¼ »ç¿ëµÇ´Â ¶óÀ̺귯¸®¸¦ ¼öÁ¤ÇÏ°í ½ÍÀ»¶§°¡ ÀÖÀ» °ÍÀÌ´Ù -- ±×¸®°í ´ç½ÅÀº ÇÁ·Î±×·¥µéÀÌ ``°³¹ß»óÀÇ''¶óÀ̺귯¸®¸¦ »ç¿ëÇϴ°ÍÀ» ¿øÄ¡ ¾ÊÀ» °ÍÀÌ°í, ¾î¶² ƯÁ¤ ÀÀ¿ëÇÁ·Î±×·¥¸¸ÀÌ ±×°ÍÀ» »ç¿ëÇϱ⸦ ¿øÇÒ°ÍÀÌ´Ù. ldÀÇ ``rpath''¿É¼ÇÀº ¾î¶² ƯÁ¤ÇÑ ÇÁ·Î±×·¥ÀÌ ÄÄÆÄÀÏ µÉ ¶§ ½Ç½Ã°£À¸·Î ¶óÀ̺귯¸®ÀÇ Æнº¸¦ Á¤ÇØÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. gcc¿¡¼ ´ç½ÅÀº ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î rpath¸¦ ÁöÁ¤ÇØ ÁÙ ¼ö ÀÖ´Ù:
3.5. °øÀ¯ ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÏ°í »ç¿ëÇϱâ´ç½ÅÀÌ °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µé¾ú´Ù¸é ´ç½ÅÀº ±×°ÍÀ» ¼³Ä¡ÇÏ°í ½Í¾î ÇÒ °ÍÀÌ´Ù. °£´ÜÇÑ ¹æ¹ýÀº Ç¥ÁØ µð·ºÅ丮(¿¹µé¸¦¾î, /usr/lib)Áß Çϳª¿¡ Ä«ÇÇÇÏ°í ldconfig(8)À» ½ÇÇà½ÃÅ°´Â °ÍÀÌ´Ù. ù°·Î, ´ç½ÅÀº °øÀ¯¶óÀ̺귯¸®¸¦ ¾îµò°¡¿¡ ¼³Ä¡ÇÏ°í ½Í¾îÇÒ °ÍÀÌ´Ù. ±×¸®°í³ª¼, ´ç½ÅÀº ½ÇÁ¦À̸§À» ºÒ¸®´ÂÀ̸§À¸·Î ½Éº¼¸¯¸µÅ©¸¦ °É¾î¾ß¸¸ ÇÒ°ÍÀÌ´Ù(¹öÀü ¼ýÀÚ°¡ ¾ø´Â ºÒ¸®´Â À̸§ÀÌ´Ù. Áï, ``.so''·Î ³¡³ª¼ »ç¿ëÀÚµéÀÌ ¹öÀü¿¡ »ó°ü¾øÀÌ »ç¿ëÇÏ°Ô ÇÏ´Â °ÍÀÌ´Ù). °£´ÜÇÑ Á¢±Ù¹ýÀº ´ÙÀ½À» ½ÇÇà½ÃÅ°´Â °ÍÀÌ´Ù:
¸¶Áö¸·À¸·Î, ³ÊÀÇ ÇÁ·Î±×·¥À» ÄÄÆÄÀÏÇÒ¶§ ´ç½ÅÀÌ ¾²·ÁÇÏ´Â Á¤Àû, °øÀ¯ ¶óÀ̺귯¸®¿¡ ´ëÇØ ¸µÄ¿¿¡°Ô ¸»ÇØÁà¾ß ÇÑ´Ù. -lÀ̳ª -L¿É¼ÇÀ» ¾²¸é µÈ´Ù. ´ç½ÅÀÌ ¶óÀ̺귯¸®¸¦ Ç¥ÁØ °ø°£(¿¹¸¦µé¾î, ´ç½ÅÀº /usr/libÀ» ¼öÁ¤ÇؾßÇÏ´Â °ÍÀº ¾Æ´Ï´Ù)¿¡ ¼³Ä¡ÇÏ°í ½ÍÁö ¾ÊÀ» °æ¿ì, ´Ù¸¥ Á¢±Ù¹ýÀÌ ÀÖ´Ù. ÀÌ °æ¿ì¿¡, ´ç½ÅÀº ´Ù¸¥ ¾îµò°¡¿¡ ¼³Ä¡ÇÏ°í ÇÁ·Î±×·¥ÀÌ ¶óÀ̺귯¸®¸¦ ãµµ·Ï ÃæºÐÇÑ Á¤º¸¸¦ ÁÖ¸éµÈ´Ù. ÀÌ ¹æ¹ý¿¡´Â ¿©·¯°¡Áö°¡ ÀÖ´Ù. °£´ÜÇÑ°æ¿ì·Î gccÀÇ -L Ç÷¡±×¸¦ ÁÙ ¼ö ÀÖ´Ù. ``Ç¥ÁØÀÌ ¾Æ´Ñ''°ø°£¿¡ Àִ ƯÁ¤ÇÑ ÇÁ·Î±×·¥À» °¡Áö°í ÀÖ´Ù¸é ``rpath''¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¹°·Ð ȯ°æº¯¼ö¸¦ »ç¿ëÇؼ ÇØ°áÇÏ´Â ¹æ¹ýµµ ÀÖ´Ù. Ưº°È÷, ´ç½ÅÀº ÄÝ·ÐÀ¸·Î ±¸ºÐµÇ¾îÁö´Â Ç¥ÁØ°ø°£¿¡¼ °Ë»ö Àü¿¡ ã¾ÆÁö´Â °øÀ¯¶óÀ̺귯¸®µéÀÇ µð·ºÅ丮µéÀÇ ¸ðÀÓÀÎ LD_LIBRARY_PATH¸¦ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¸¸¾à ´ç½ÅÀÌ bash¸¦ »ç¿ëÇÑ´Ù¸é, my_programÀº ´ÙÀ½°ú °°Àº ¹æ¹ýÀ¸·Î µÉ ¼ö ÀÖ´Ù:
¸î °³ÀÇ ÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵å Çϱ¸ ½Í´Ù¸é, ¿À¹ö¶óÀ̵å ÇÒ ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé°í LD_PRELOAD¸¦ ¼³Á¤Ç϶ó;ÀÌ ¿ÀºêÁ§Æ® ÆÄÀÏÀÇ ÇÔ¼ö´Â ±× ÇÔ¼öµéÀ» ¿À¹ö¶óÀ̵å ÇÒ °ÍÀÌ´Ù(´Ù¸¥ ÇÔ¼öµéÀº ¿ø·¡ ÀÖ´ø´ë·Î ÀÖÀ» °ÍÀÌ´Ù). º¸ÅëÀº ´ç½ÅÀÌ ¶óÀ̺귯¸®¸¦ °ÆÁ¤¾øÀÌ ¾÷µ¥ÀÌÆ® ÇÒ ¼ö ÀÖ´Ù; ¸¸¾à API°¡ ¹Ù²î¸é ¶óÀ̺귯¸® Á¦ÀÛÀÚ´Â ºÒ¸®´Â À̸§À» ¹Ù²Ù¾î¾ß ÇÑ´Ù. ÀÌ·±¹æ½ÄÀ¸·Î, ÇÑ ½Ã½ºÅÛ¿¡ ¸¹Àº ¶óÀ̺귯¸®°¡ ÀÖÀ»°ÍÀÌ°í, Á¤È®ÇÑ°ÍÀÌ °¢°¢ÀÇ ÇÁ·Î±×·¥¿¡¼ ¼±ÅÃµÇ¾î¼ »ç¿ëµÇ¾îÁø´Ù. ±×·¯³ª, ¾î¶² ÇÁ·Î±×·¥ÀÌ °°Àº ºÒ¸®´Â À̸§À» °¡Áö´Â ¶óÀ̺귯¸®¿¡ ´ëÇؼ ¾÷µ¥ÀÌÆ® ÇÑ°ÍÀÌ Àß µ¿ÀÛÇÏÁö ¾Ê´Â´Ù¸é, ³Ê´Â ¿¹Àü ¹öÀüÀÇ ¶óÀ̺귯¸®¸¦ ´Ù¸¥°÷¿¡ ¿Å°ÜµÎ°í ±× ÇÁ·Î±×·¥ÀÇ À̸§À» ¹Ù²Ù°í(¿¹ÀüÀ̸§¿¡´Ù°¡ ``.orig''¸¦ ºÙÀδÙ), ¶óÀ̺귯¸® »ç¿ëÀ» ¸®¼ÂÇÏ°í ½ÇÁ¦ÀÇ »õ·Î À̸§ÀÌ ºÙÀº ÇÁ·Î±×·¥À» ºÎ¸£´Â ÀÛÀº ``°¨½Î´Â(wrapper)'' ½ºÅ©¸³Æ®¸¦ ¸¸µé¼ö ÀÖ´Ù. ´ç½ÅÀÌ ¿øÇÑ´Ù¸é, ¼ýÀÚ °ü·Ê°¡ Çã¿ëÇÏ´Â ÇÑ °°Àº µð·ºÅ丮¿¡´Ù°¡ ¿¹ÀüÀÇ ¶óÀ̺귯¸®¸¦ ´Ù¸¥°÷¿¡ ¿Å°Ü µÑ ¼ö ÀÖ´Ù. °¨½Î´Â ½ºÅ©¸³Æ®´Â ´ÙÀ½°ú °°´Ù:
´ç½ÅÀº °øÀ¯ ¶óÀ̺귯¸®ÀÇ ¸®½ºÆ®¸¦ ldd(1)À» »ç¿ëÇؼ º¼¼ö ÀÖ´Ù. µû¶ó¼, ¿¹¸¦µé¾î ´ç½ÅÀº ls¿¡ »ç¿ëµÇ´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ º¼ ¼ö ÀÖ´Ù.
3.6. ȣȯµÇÁö ¾Ê´Â ¶óÀ̺귯¸®µé»õ¹öÀüÀÇ ¶óÀ̺귯¸®°¡ ¿¹Àü¹öÀü°ú ÀÌÁø-ȣȯÀÌ ¾ÈµÈ´Ù¸é, ºÒ·ÁÁö´Â À̸§ÀÌ ¹Ù²î¾î¾ß ÇÑ´Ù. C¿¡¼´Â ÀÌÁø ȣȯÀÌ ¾ÈµÇ°Ô µÇ´Â 4°¡Áö ±âº» °æ¿ì°¡ ÀÖ´Ù.
ÀÌ·±°æ¿ì¸¦ ÇÇÇÏ·ÁÇÑ´Ù¸é, ÀÌÁø-ȣȯÀÌ µÇ°Ô ¶óÀ̺귯¸®¸¦ À¯ÁöÇÒ ¼ö ÀÖ´Ù. ´Ù½Ã ¸»Çؼ ±×·±°æ¿ì¸¦ ÇÇÇÏ°í ½Í´Ù¸é ÀÀ¿ë ÀÌÁø ÀÎÅÍÆäÀ̽º(ABI=Application Binary Interface)¸¦ ÇÒ ¼ö ÀÖ´Ù. ¿¹µéµé¾î, ¿¹Àü°ÍµéÀ» Áö¿ìÁö ¾Ê°í »õ·Î¿î ÇÔ¼ö¸¦ Ãß°¡ÇÏ°í ½ÍÀ» ¼ö ÀÖ´Ù. ´ç½ÅÀº ±¸Á¶¿¡ »õ·Î¿î ¾ÆÀÌÅÛÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸, ¿¹Àü ÇÁ·Î±×·¥ÀÌ »õ·Î¿î ¾ÆÀÌÅÛÀ» Ãß°¡ÇÑ ±¸Á¶¸¦ ÀνÄÇÏÁö ¸øÇѴٰųª (ÇÁ·Î±×·¥ÀÌ ¾Æ´Ñ)¶óÀ̺귯¸®°¡ »õ·Î¿î °ø°£À» ÇÒ´çÇÏÁö ¸øÇϰųª, Ãß°¡ÀÇ ¾ÆÀÌÅÛÀ» ¿É¼ÇÀ¸·Î ¸¸µå´Â°Í(¶Ç´Â ¶óÀ̺귯¸®°¡ ±×°ÍµéÀ» ä¿ì°Ô Çϴ°Í)µîµîÀ» È®½ÇÈ÷ ÇؾßÇÑ´Ù´Â °ÍÀ» ÁÖÀÇÇ϶ó. ÁÖÀÇÇ϶ó - À¯Àú°¡ ¹è¿¿¡ ±¸Á¶¸¦ »ç¿ëÇÏ°í ÀÖ´Ù¸é ´ç½ÅÀº ¹è¿ÀÇ ±¸Á¶¸¦ ´Ã¸±¼ö ¾ø´Ù. C++(±×¸®°í ÄÄÆÄÀÏµÈ ÅÛÇø´À̳ª ´Ù¸¥ µð½ºÆÐÄ¡µÈ ¸Þ¼Òµå¸¦ Áö¿øÇÏ´Â ¾ð¾î)¿¡¼ »óȲÀº ±³¹¦ÇØÁø´Ù. À§ÀÇ ¸ðµç »óȲÀÌ ÀÌ·ç¾îÁ®¾ß ÇÏ°í, ´õ ÇØÁÖ¾î¾ß ÇÒ À̽´µéÀÌ ÀÖ´Ù. »óȲÀº ÄÄÆÄÀÏµÈ Äڵ忡¼ ``º¸ÀÌÁö ¾Ê°Ô'' ±¸ÇöµÇ±â ¶§¹®¿¡ C++ÀÌ ¾î¶»°Ô ±¸ÇöµÇ¾ú´ÂÁö ¾ËÁö ¸øÇÏ¸é ¾Ö¸Å¸ðÈ£ÇØÁö´Â ÀÇÁ¸¼ºÀ» ³º´Â Á¤º¸µé ¶§¹®¿¡ ÀϾÙ. ¾ö¹ÐÇÏ°Ô ¸»Çϸé, ÀÌ°ÍÀº ``»õ·Î¿î'' À̽´´Â ¾Æ´Ï´Ù. ´ÜÁö, ÄÄÆÄÀÏµÈ C++Äڵ尡 ³Ê¿¡°Ô ³î¶ó°Ô ÇÒ ¼ö ÀÖÀ»°ÍÀÌ´Ù. ´ÙÀ½¿¡ ³ª¿À´Â °ÍµéÀº (¾Æ¸¶µµ ºÎÁ·ÇÏ°ÚÁö¸¸) Troll Tech's Technical FAQ¿¡ ³ª¿À´Â ÀÌÁø ȣȯÀ» À¯ÁöÇϱâ À§ÇØ C++¿¡¼ »ç¿ëÇÏ¸é ¾ÈµÇ´Â °ÍµéÀÇ ¸ñ·ÏÀÌ´Ù.
À§ÀÇ ÁÖ¾îÁø ¸ñ·Ï´ë·Î, C++¶óÀ̺귯¸® °³¹ßÀÚµéÀº ¶§¶§·Î ÀÌÁø ȣȯ¼ºÀ» ±ú´Â ¾÷µ¥ÀÌÆ®¸¦ °èȹÇؾ߸¸ÇÑ´Ù. ´ÙÇེ·´°Ôµµ, À¯´Ð½º ±â¹Ý ½Ã½ºÅÛÀº µ¿½Ã¿¡ ·ÎµåµÇ´Â ¶óÀ̺귯¸®ÀÇ ¸¹Àº ¹öÀüÀ» °¡Áö°í ÀÖ¾î¼, µð½ºÅ© °ø°£À» Á¶±Ý ÇÒ´çÇÑ´Ù¸é, À¯ÀúµéÀº ¿¹ÀüÀÇ ¶óÀ̺귯¸®¸¦ ¿ä±¸ÇÏ´Â ``¿¹Àü''ÇÁ·Î±×·¥À» µ¹¸±¼ö ÀÖ´Ù. 4. µ¿Àû ÀûÀç(DL) ¶óÀ̺귯¸®µ¿Àû ÀûÀç ¶óÀ̺귯¸®´Â ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§°¡ ¾Æ´Ñ ´Ù¸¥ ½Ã±â¿¡ ÀûÀçµÇ´Â ¶óÀ̺귯¸®ÀÌ´Ù. À̰͵éÀº Ç÷¯±×ÀÎÀ̳ª ¸ðµâÀ» ±¸ÇöÇÒ¶§ ÀûÇÕÇÏ´Ù. ¿Ö³ÄÇÏ¸é ±×°ÍµéÀÌ ÇÊ¿äÇØÁú¶§±îÁö ÀûÀ縦 ±â´Ù¸± ¼ö Àֱ⠶§¹®ÀÌ´Ù. ¿¹¸¦µé¾î, PAM(Pluggable Authentication Modules)½Ã½ºÅÛÀº °ü¸®ÀÚ°¡ ÀÎÁõÀ» °ü¸®ÇÏ´Â °ÍÀ» Çã¿ëÇϱâ À§ÇØ DL¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ´Ù. À̰͵éÀº ¶ÇÇÑ ¶§¶§·Î Äڵ带 ¸Ó½Å ÄÚµå·Î ¹Ù²Ù°í È¿À²À» À§ÇØ ¸ØÃßÁö ¾Ê°í ÄÄÆÄÀÏµÈ ÄÚµå·Î ¸¸µå´Â ÀÎÅÍÇÁ¸®Å͸¦ ±¸ÇöÇϴµ¥ À¯¿ëÇÏ´Ù. ÀÌ°ÍÀº ½Ç½Ã°£ÀÇ(just-in-time) ÄÄÆÄÀÏ·¯³ª MUD(multi-user dungeon)À» ±¸ÇöÇϴµ¥¿¡ À¯¿ëÇÏ´Ù. ¸®´ª½º¿¡¼, DL ¶óÀ̺귯¸®´Â ±×µéÀÇ Æ÷¸äÀÇ °üÁ¡¿¡ ÀÖ¾î¼ Æ¯º°ÇÏÁö ¾Ê´Ù; ±×µéÀº Ç¥ÁØÀÇ ¿ÀºêÁ§Æ® ÆÄÀÏ·Î ¸¸µé¾îÁö°Å³ª, À§¿¡¼ ¾ð±ÞµÈ Ç¥ÁØÀÇ °øÀ¯ ¶óÀ̺귯¸® ÆÄÀÏ·Î ¸¸µé¾îÁø´Ù. ÁÖ¿ä Â÷ÀÌÁ¡Àº ÇÁ·Î±×·¥ÀÇ ¸µÅ©½Ã³ª ½ÃÀ۽ÿ¡ ÀûÀçµÇÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù; ´ë½Å, ¶óÀ̺귯¸®¸¦ ¿°Å³ª, ½Éº¼À» ã°Å³ª, ¿¡·¯¸¦ Á¶Á¤Çϰųª, ¶óÀ̺귯¸®¸¦ ´Ý´Â Ưº°ÇÑ API°¡ ÀÖ´Ù. C »ç¿ëÀÚµéÀº ÀÌ·± API¸¦ »ç¿ëÇϱâÀ§ÇØ dlfcn.h¶ó´Â Çì´õÆÄÀÏÀ» Æ÷ÇÔÇØ¾ß ÇÑ´Ù. ¸®´ª½º¿¡¼ »ç¿ëµÇ´Â ÀÎÅÍÆäÀ̽º´Â ¼Ö¶ó¸®½º¿¡¼ »ç¿ëµÇ´Â ÀÎÅÍÆäÀ̽º¿Í °°´Ù. ÀÌ°ÍÀ» ³ª´Â ``dlopen()'' API¶ó°í ºÒ¸¦ °ÍÀÌ´Ù. ±×·¯³ª, ÀÌ °°Àº ÀÎÅÍÆäÀ̽º°¡ ¸ðµç Ç÷§Æû¿¡¼ Áö¿øµÇ´Â °ÍÀº ¾Æ´Ï´Ù; HP-UX´Â shl_load()¹æ¹ýÀ» »ç¿ëÇÏ°í, À©µµ¿ìÁî´Â ¿ÏÀüÈ÷ ´Ù¸¥ ÀÎÅÍÆäÀ̽ºÀÇ DLLsÀ» »ç¿ëÇÑ´Ù. ¸¸¾à ´ç½ÅÀÌ Æø³ÐÀº Æ÷ÆüºÀÌ ¸ñÇ¥¶ó¸é, ´ç½ÅÀº ÀÌ·± ´Ù¸¥ Ç÷§ÆûÀ» ¼û±â´Â ¶óÀ̺귯¸®¸¦ »ý°¢ÇØ¾ß ÇÒ°ÍÀÌ´Ù. ÇϳªÀÇ ¹æ¹ýÀº ¸ðµâÀÇ µ¿Àû ÀûÀ縦 Áö¿øÇÏ´Â glib ¶óÀ̺귯¸®ÀÌ´Ù; ±×°ÍÀº ÀÌ ÇÔ¼öµéÀÇ Æ÷Æð¡´ÉÇÑ ÀÎÅÍÆäÀ̽º¸¦ ±¸ÇöÇϱâÀ§ÇØ Ç÷§ÆûÀÇ µ¿Àû ÀûÀç ·çƾÀ» »ç¿ëÇÑ´Ù. http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.htmlÀÇ ¸µÅ©¿¡¼ glib¿¡ ´ëÇØ ¸¹Àº °ÍÀ» ã¾Æº¼ ¼ö ÀÖ´Ù. glib ÀÎÅÍÆäÀ̽º°¡ ÀÌ ¹®¼¿¡ Àß ¼³¸íµÇÀֱ⠶§¹®¿¡ ´õ ¾ð±ÞÇÏÁö ¾Ê°Ú´Ù. ´Ù¸¥ ¹æ¹ýÀº GNU libtoolÀÇ ÀϺÎÀÎ libltdlÀ» »ç¿ëÇÏ´Â °ÍÀÌ´Ù. ´ç½ÅÀÌ À̰ͺ¸´Ù ´õ ±â´ÉÀûÀΰÍÀ» ¿øÇÑ´Ù¸é, CORBA ORB(Object Request Broker)¸¦ ã¾Æº¸¾Æ¶ó. ´ç½ÅÀÌ ¸®´ª½º¿Í ¼Ö¶ó¸®½º¿¡¼ Á÷Á¢ Áö¿øµÇ´Â °ÍÀ» ¾ÆÁ÷µµ ¿øÇÏ°í ÀÖ´Ù¸é, °è¼Ó Àо°¡¶ó. 4.1. dlopen()dlopen(3)ÇÔ¼ö´Â ¶óÀ̺귯¸®¸¦ ¿°í ±×°ÍÀÌ »ç¿ëµÇµµ·Ï Áغñ½ÃÄÑÁØ´Ù. C¿¡¼ ÇÁ·ÎÅäŸÀÔÀº ´ÙÀ½°ú °°´Ù:
¶óÀ̺귯¸®µéÀÌ ¼·Î ÀÇÁ¸ÇÑ´Ù¸é(¿¹¸¦µé¾î X°¡ Y¿¡ ÀÇÁ¸ÇÑ´Ù¸é), ´ç½ÅÀº ÀÇÁ¸´çÇÏ´Â °ÍÀ» ¸ÕÀú ·ÎµåÇؾßÇÑ´Ù(ÀÌ ¿¹Á¦¿¡¼ Y¸¦ ·ÎµåÇÏ°í X¸¦ ·ÎµåÇØ¾ß ÇÑ´Ù). dlopen()ÀÇ ¸®ÅÏ °ªÀº ´Ù¸¥ DL¶óÀ̺귯¸® ·çƾÀÌ »ç¿ëÇϱ⿡ ¾Ö¸Å¸ðÈ£ÇÏ°Ô ´À²¸Áö´Â ``ÇÚµé''ÀÌ´Ù. dlopen()Àº ·Îµå°¡ ¼º°øÇÏÁö ¸øÇϰųª ´ç½ÅÀÌ Ã¼Å©ÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖ´Ù°í »ý°¢Çϸé NULLÀ» ¸®ÅÏÇÑ´Ù. dlopen()¿¡ ÀÇÇØ °°Àº ¶óÀ̺귯¸®°¡ ÇѹøÀÌ»ó ·ÎµåµÇ¸é °°Àº ÆÄÀÏ ÇÚµéÀÌ ¸®ÅϵȴÙ. ¶óÀ̺귯¸®°¡ _initÀ̶ó À̸§Áö¾îÁø ·çƾÀ» »ç¿ëÇÑ´Ù¸é(export), ±× ÄÚµå´Â dlopen()ÀÌ ¹ÝȯÇϱâ Àü¿¡ ½ÇÇàµÈ´Ù. ´ç½ÅÀº ÃʱâÈ ·çƾÀ» ±¸ÇöÇϱâÀ§ÇØ ´ç½ÅÀÇ ¶óÀ̺귯¸®¿¡¼ ÀÌ »ç½ÇÀ» »ç¿ëÇßÀ»°ÍÀÌ´Ù. ´õ ÀÚ¼¼ÇÑ ³»¿ëÀ» À§ÇØ 5.2절À» º¸¾Æ¶ó. 4.2. dlerror()¿¡·¯´Â dlerror()¸¦ È£ÃâÇÔÀ¸·Î½á º¸°íµÉ¼ö ÀÖ´Ù. dlerror()´Â dlerror(), dlsym(), dlclose()Áß ¸¶Áö¸· ºÎ¸¥°ÍÀÇ ¿¡·¯ÀÇ ½ºÆ®¸µÀ» ¹ÝȯÇÑ´Ù. ÇϳªÀÇ ÀÌ»óÇÑÁ¡Àº dlerror()¸¦ ºÎ¸£°í ³ª¼ dlerror()¸¦ ºÎ¸£´Â °ÍÀº ±× »çÀÌ¿¡ ´Ù¸¥ ¿¡·¯°¡ ¾øÀ¸¸é NULLÀ» ¹ÝȯÇÑ´Ù´Â °ÍÀÌ´Ù. 4.3. dlsym()´ç½ÅÀÌ »ç¿ëÇÒ ¼ö ¾ø´Ù¸é DL¶óÀ̺귯¸®¸¦ ·ÎµùÇÏ´Â Àǹ̰¡ ¾ø´Ù. DL¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â Áß¿äÇÑ ·çƾÀº dlsym(3)ÀÌ´Ù. ÀÌ°ÍÀº ¿·ÁÁø ¶óÀ̺귯¸®ÀÇ ½Éº¼ÀÇ °ªÀ» ã¾ÆÁØ´Ù. ÀÌ ÇÔ¼ö´Â ´ÙÀ½°ú °°ÀÌ Á¤ÀǵȴÙ:
dlsym()Àº ½Éº¼ÀÌ ¾øÀ¸¸é NULLÀ» ¹ÝȯÇÒ °ÍÀÌ´Ù. ¸¸¾à ´ç½ÅÀÇ ½Éº¼¿¡ NULLÀ̳ª 0ÀÌ ¾ø´Ù´Â °ÍÀ» ¾Ë¸é ÁÁ°ÚÁö¸¸, ´ÙÀ½°ú °°Àº ÀáÀçÀûÀÎ ¹®Á¦°¡ ÀÖ´Ù: ´ç½ÅÀÌ ¹ÞÀº NULLÀÌ ¿¡·¯Àΰ¡, ¾Æ´Ï¸é ½Éº¼ÀÇ °ªÀÌ NULLÀΰ¡? Ç¥ÁØÀûÀÎ ÇØ°á¹ýÀº dlerror()¸¦ ºÎ¸£°í(Àü¿¡ ÀÖ´ø ¿¡·¯µéÀ» ¾ø¾Ø´Ù), dlsym()À» ºÒ·¯¼ ½Éº¼ÀÇ °ªÀ» ºÎ¸£°í, dlerror()¸¦ ºÒ·¯¼ ¿¡·¯°¡ ³µ´ÂÁö üũÇÑ´Ù. ´Ü¼øÇÑ ÄÚµå´Â ´ÙÀ½°ú °°´Ù:
4.4. dlclose()dlopen()ÀÇ ¹Ý´ë´Â dlclose()·Î¼, DL ¶óÀ̺귯¸®¸¦ ´Ý¾ÆÁØ´Ù. DL ¶óÀ̺귯¸®°¡ µ¿Àû ÆÄÀÏ ÇÚµéÀÇ ¸µÅ© ¼ö¸¦ °ü¸®Çϱ⠶§¹®¿¡, µ¿Àû ¶óÀ̺귯¸®´Â dlopenÀÌ ¼º°øÇÑ ¸¸Å ¸ðµÎ dlclose¸¦ ºÒ·¯ÁÖ±â Àü¿¡ ´Ù ÇÒ´çÀÌ ¾ø¾îÁöÁö´Â ¾Ê´Â´Ù. µû¶ó¼, °°Àº ÇÁ·Î±×·¥ÀÌ °°Àº ¶óÀ̺귯¸®¸¦ ¿©·¯¹ø ºÒ·¯Áִ°ÍÀº ¹®Á¦°¡ µÇÁö ¾Ê´Â´Ù. ¶óÀ̺귯¸®°¡ ÇÒ´çÀÌ ¾ø¾îÁø´Ù¸é, ÇÔ¼öÀÇ _fini°¡ ºÒ¸°´Ù(Á¸ÀçÇÑ´Ù¸é); ´õ ÀÚ¼¼ÇÑ Á¤º¸¸¦ À§ÇØ 5.2절¸¦ º¸¾Æ¶ó. ÁÖÀÇÇ϶ó : dlclose()´Â ¼º°øÇϸé 0À» ¸®ÅÏÇÏ°í, ¾Æ´Ï¸é 0ÀÌ ¾Æ´Ñ °ªÀ» ¸®ÅÏÇÑ´Ù; ¾î¶² ¸®´ª½º ¸Þ´º¾óÀº ÀÌ°ÍÀ» ¾ð±ÞÇÏ°í ÀÖÁö ¾Ê´Ù. 4.5. DL ¶óÀ̺귯¸® ¿¹Á¦¿©±â¿¡ ÀÖ´Â ¿¹Á¦´Â dlopen(3)ÀÇ ¸ÇÆäÀÌÁö¿¡ ³ª¿À´Â ¿¹Á¦ÀÌ´Ù. ÀÌ ¿¹Á¦´Â math¶óÀ̺귯¸®¸¦ ·ÎµåÇؼ, ÄÚ»çÀÎ 2.0À» Ãâ·ÂÇÑ´Ù. ¶ÇÇÑ, °¢°¢ÀÇ ´Ü°è¿¡¼ ¿¡·¯ üũ¸¦ ÇÑ´Ù(ÀÌ·¸°Ô Çϱ⸦ ÃßõÇÑ´Ù).
¸¸¾à ÀÌ ÇÁ·Î±×·¥ÀÇ ÆÄÀÏÀ̸§ÀÌ "foo.c"¶ó¸é, ´ÙÀ½°ú °°Àº ¸í·ÉÀ¸·Î ÇÁ·Î±×·¥À» ¸¸µé ¼ö ÀÖÀ» °ÍÀÌ´Ù:
5. Miscellaneous5.1. nm ¸í·Énm(1)¸í·ÉÀº ÁÖ¾îÁø ¶óÀ̺귯¸®ÀÇ ½Éº¼ÀÇ ¸®½ºÆ®¸¦ º¸°íÇÑ´Ù. ÀÌ°ÍÀº Á¤Àû, °øÀ¯ ¶óÀ̺귯¸®¿¡¼ ¸ðµÎ µ¿ÀÛÇÑ´Ù. ÁÖ¾îÁø ¶óÀ̺귯¸®¿¡¼, nm(1)Àº Á¤ÀÇµÈ ½Éº¼ÀÇ À̸§, °¢°¢ÀÇ ½Éº¼ÀÇ °ª, ½Éº¼ÀÇ Å¸ÀÔÀ» ³ª¿ÇÑ´Ù. ÀÌ°ÍÀº ¶ÇÇÑ ¶óÀ̺귯¸®¿¡¼ °¡´ÉÇÏ´Ù¸é(-l¿É¼ÇÀ» º¸¶ó), ½Éº¼ÀÌ ¼Ò½ºÄÚµåÀÇ ¾îµð¿¡¼ Á¤ÀǵǾú´ÂÁö ¾Ë·ÁÁØ´Ù(ÆÄÀÏÀ̸§°ú ÁÙ ¹øÈ£¸¦ Ç¥½ÃÇÔÀ¸·Î¼). ½Éº¼Å¸ÀÔÀº ´õ ¸¹Àº ¼³¸íÀ» ¿ä±¸ÇÑ´Ù. ŸÀÔÀº ÇѱÛÀڷνá Ç¥½ÃµÈ´Ù; ¼Ò¹®Àڴ ŸÀÔÀÌ Áö¿ªÀûÀ̶ó´Â °ÍÀÌ°í, ´ë¹®Àڴ ŸÀÔÀÌ Àü¿ªÀû(¿ÜºÎÀû)À̶ó´Â °ÍÀ» ÀǹÌÇÑ´Ù. º¸ÅëÀÇ ½Éº¼Å¸ÀÔµéÀº ´ÙÀ½°ú °°´Ù. T (Äڵ弽¼Ç¿¡¼ º¸ÅëÀÇ Á¤ÀÇ), D (ÃʱâÈ µ¥ÀÌÅÍ ¼½¼Ç), B (ÃʱâȵÇÁö ¾ÊÀº µ¥ÀÌÅÍ ¼½¼Ç), U (Á¤ÀǵÇÁö ¾ÊÀ½; ½Éº¼ÀÌ ¶óÀ̺귯¸®¿¡ÀÇÇØ »ç¿ëµÇÁö¸¸ ¶óÀ̺귯¸®¿¡ ÀÇÇØ Á¤ÀǵÇÁö ¾Ê¾Ò´Ù), W (¾àÇÔ; ´Ù¸¥ ¶óÀ̺귯¸®°¡ ÀÌ ½Éº¼À» Á¤ÀÇÇÑ´Ù¸é, ±× Á¤ÀÇ°¡ ÀÌ Á¤ÀǸ¦ ¿À¹ö¶óÀ̵å ÇÒ ¼ö ÀÖ´Ù). ´ç½ÅÀÌ ÇÔ¼öÀÇ À̸§À» ¾ËÁö¸¸, ¾î¶² ¶óÀ̺귯¸®¿¡¼ Á¤ÀǵÇÀÖ´ÂÁö ±â¾ïÇÏÁö ¸øÇÑ´Ù¸é, grepÀ¸·Î ¶óÀ̺귯¸®¸¦ ãÀ¸¸é¼ nmÀÇ ``-o''¿É¼Ç(°¢°¢ÀÇ ÁÙÀÇ ÆÄÀÏ À̸§À» ¾Õ¿¡ ºÙÀδÙ)À» »ç¿ëÇÒ ¼ö ÀÖ´Ù. bash¿¡¼ ´ç½ÅÀº /lib, /usr/lib¿Í /usr/lib, /usr/local/libÀÇ ÇϺΠµð·ºÅ丮¿¡¼ ``cos''¸¦ ´ÙÀ½°ú °°ÀÌ Ã£À» ¼ö ÀÖ´Ù.
nm¿¡ ´ëÇØ ´õ ¸¹Àº °ÍÀ» ¾Ë°í ½ÍÀ¸¸é info:binutils#nm¿¡ ``Á¤º¸'' ¹®¼°¡ ÀÖµû. 5.2. Ưº°ÇÔ¼ö _init, _finiµÎ°³ÀÇ Æ¯º°ÇÑ ÇÔ¼ö°¡ ÃʱâÈ¿Í Á¾°áÈÀÇ ¸ðµÑÀ» µ½´Â´Ù:_init¿Í _fini. ``_init''ÇÔ¼ö°¡ ¶óÀ̺귯¸®¿¡ ÀÇÇØ ³»º¸³»Áø´Ù¸é, ¶óÀ̺귯¸®°¡ óÀ½¿¡ ¿¾îÁú¶§ ºÒ¸±°ÍÀÌ´Ù(dlopen()À̳ª °øÀ¯¶óÀ̺귯¸®ÀÇ ÇüÅ·Î). C ÇÁ·Î±×·¥¿¡¼, ÀÌ°ÍÀº ´ç½ÅÀÌ _initÀ̶õ À̸§ÀÌ ºÙÀº ¾î¶² ÇÔ¼ö¸¦ Á¤ÀÇÇß´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÀÌ°Í¿¡ ´ëÇÑ _finiÇÔ¼ö°¡ Àִµ¥, ÀÌ°ÍÀº Ŭ¶óÀ̾ðÆ®°¡ ¶óÀ̺귯¸® »ç¿ëÀ» ³¡³¾¶§ ºÒ¸®´Â ÇÔ¼öÀÌ´Ù(0³ª ÇÁ·Î±×·¥ÀÇ Á¤»óÁ¾·á¸¦ °¡Á®¿À´Â dlclose()ÀÇ ÇüÅ·Î). ÀÌ ÇÔ¼öÀÇ C ÇÁ·ÎÅäŸÀÔÀº ´ÙÀ½°ú °°´Ù:
``.o''ÆÄÀÏÀ» gcc¿¡¼ ÄÄÆÄÀÏ ÇÒ ¶§, ``-nostartfiles''¿É¼ÇÀ» ³Ö¾î¶ó. ÀÌ°ÍÀº CÄÄÆÄÀÏ·¯°¡ .soÆÄÀÏ¿¡ ´ëÇØ ½Ã½ºÅÛ ½ÃÀÛ ¶óÀ̺귯¸®¸¦ ¸µÅ©Çϵµ·Ï ÇØÁØ´Ù. ±×·¸Áö ¾ÊÀ¸¸é, ´ç½ÅÀº ``multiple=definition''¿¡·¯¸¦ ¸¸³¯ °ÍÀÌ´Ù. Jim Mischel°ú Tim GentryÀÌ _init, _finiÇÔ¼ö¿¡ ´ëÇÑ ³íÀÇ¿¡¼ ±ÛÀ» ¾²´Âµ¥ µµ¿òÀ» ÁáÀ» »Ó¸¸ ¾Æ´Ï¶ó ÀÌ·± Á¦¾ÈÀ» ÇØÁØ°Í¿¡ ÀÇÇØ °¨»çÇÑ´Ù. 5.3. °øÀ¯ ¶óÀ̺귯¸®´Â ½ºÅ©¸³Æ®°¡ µÉ ¼ö ÀÖ´ÙGNU ·Î´õ°¡ Ưº°ÇÑ ½ºÅ©¸³Æ® ¾ð¾î¸¦ ÅëÇØ º¸ÅëÀÇ ¶óÀ̺귯¸® Çü½Ä´ë½Å ÅؽºÆ® ÆÄÀÏÀÇ ÇüÅ·Π°øÀ¯ ¶óÀ̺귯¸®¸¦ À¯ÁöÇÏ°Ô Çϴ°ÍÀº Àǹ̰¡ ¾ø´Ù. ÀÌ°ÍÀº °£Á¢ÀûÀ¸·Î ´Ù¸¥ ¶óÀ̺귯¸®¸¦ ÇÕÄ¡°Ô µÊÀ¸·Î¼ À¯¿ëÇÏ´Ù. ¿¹¸¦µé¾î, ³ªÀÇ ½Ã½ºÅÛÁß Çϳª¿¡¼ µ¹¾Æ°¡´Â /usr/lib/libc.soÀÇ ¸®½ºÆ®°¡ ÀÖ´Ù:
ÀÌ°Í¿¡ ´ëÇØ ´õ ¸¹Àº Á¤º¸¸¦ ¾ò±âÀ§ÇØ ld¸µÄ¿ ½ºÅ©¸³Æ®¸¦ º¸¾Æ¶ó(ld¸í·É¾î). ÀϹÝÀûÀÎ Á¤º¸´Â info:ld#Options¿Í info:ld#Commands¿¡¼ ¾òÀ»¼ö ÀÖ°í, info:ld#Option Commands¿¡¼ ¸í·É¾îÀÇ Á¤º¸¸¦ ¾òÀ»¼ö ÀÖ´Ù. 5.4. GNU libtool¸¸¾à ´ç½ÅÀÌ ´Ù¸¥ ¸¹Àº ½Ã½ºÅÛ¿¡ Æ÷ÆÃÇÒ ÀÀ¿ëÇÁ·Î±×·¥À» Á¦ÀÛÇÑ´Ù¸é, ´ç½ÅÀº ¶óÀ̺귯¸®¸¦ ¸¸µé°í ¼³Ä¡Çϱâ À§ÇØ GNU libtool¸¦ »ç¿ëÇϴ°ÍÀ» °í·ÁÇØ¾ß ÇÒ °ÍÀÌ´Ù. GNU libtoolÀº ½ºÅ©¸³Æ®¸¦ Áö¿øÇÏ´Â ÀϹÝÀûÀÎ ¶óÀ̺귯¸®ÀÌ´Ù. LibtoolÀº ÀÏ°üÀûÀÌ°í Æ÷Æð¡´ÉÇÑ ÀÎÅÍÆäÀ̽º¼Ó¿¡ °øÀ¯¶óÀ̺귯¸®ÀÇ º¹Àâµµ¸¦ ÁÙ¿©ÁØ´Ù. LibtoolÀº ¿ÀºêÁ§Æ® ÆÄÀÏÀ» ¸¸µé°í, (Á¤Àû, °øÀ¯)¶óÀ̺귯¸®¸¦ ¸µÅ©ÇÏ°í, ½ÇÇàÆÄÀÏÀ» ¸µÅ©ÇÏ°í, ½ÇÇàÆÄÀÏÀ» µð¹ö±×ÇÏ°í, ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÏ°í, ½ÇÇàÆÄÀÏÀ» ¼³Ä¡Çϴµ¥ Æ÷Æð¡´ÉÇÑ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÑ´Ù. ÀÌ°ÍÀº ¶ÇÇÑ libltdlÀ» Æ÷ÇÔÇϴµ¥, µ¿Àû ÀûÀç ÇÁ·Î±×·¥ÀÇ Æ÷Æð¡´ÉÇÑ °¨½Î´Â ¿ªÇÒÀ» ÇÑ´Ù. ´õ ¸¹Àº Á¤º¸¸¦ À§Çؼ http://www.gnu.org/software/libtool/manual.htmlÀÇ ¹®¼¸¦ Âü°íÇ϶ó. 5.5. °ø°£À» À§ÇØ ½Éº¼À» Á¦°ÅÇϱâ»ý¼ºµÈ ÆÄÀÏ¿¡ Æ÷ÇԵǴ ¸ðµç ½Éº¼Àº µð¹ö±ë¿¡ À¯¿ëÇÏÁö¸¸, ³Ê¹« ¸¹Àº °ø°£À» Â÷ÁöÇÑ´Ù. ¸¸¾à °ø°£ÀÌ ÇÊ¿äÇÏ´Ù¸é, ±×°ÍµéÀÇ ÀϺθ¦ Áö¿ö¶ó. ÃÖ¼±ÀÇ Á¢±Ù¹ýÀº ¿ÀºêÁ§Æ® ÆÄÀÏÀ» Á¤»óÀûÀ¸·Î »ý¼ºÇÏ°í, µð¹ö±ë°ú °Ë»ç¸¦ ¸ÕÀúÇÑ´Ù(À̰͵éÀ» °¡Áö°í µð¹ö±ë, °Ë»ç¸¦ Çϴ°ÍÀº ¸Å¿ì ÆíÇÏ´Ù). ±×¸®°í³ª¼, ÇÁ·Î±×·¥À» ¿ÏÀüÈ÷ °Ë»çÇßÀ¸¸é, strip(1)À» »ç¿ëÇؼ ½Éº¼µéÀ» Áö¿ö¶ó. strip(1) ¸í·ÉÀº ½Éº¼À» Áö¿ì´Âµ¥ ¸¹ÀÌ Æí¸®ÇÏ°Ô ÇØÁØ´Ù; ÀÚ¼¼ÇÑ°ÍÀº ±×°ÍÀÇ ¹®¼¸¦ ÂüÁ¶Ç϶ó. ´Ù¸¥, GNU ld¿é¼ÇÀÇ ´Ù¸¥ °ÍÀ¸·Î´Â ``-S''¿Í ``-s''°¡ ÀÖ´Ù; ``-S''´Â Ãâ·ÂÆÄÀÏ¿¡¼ (¸ðµç ½Éº¼À̾ƴÑ)µð¹ö°Å ½Éº¼ Á¤º¸¸¦ ºü¶ß¸°´Ù. ``-s''¿É¼ÇÀº Ãâ·ÂÆÄÀÏ¿¡ ¸ðµç ½Éº¼ Á¤º¸¸¦ ½á ³Ö´Â´Ù. ``-Wl, -S''¿Í ''-Wl,-s''·Î¼ gcc¸¦ ÅëÇØ ÀÌ ¿É¼ÇÀ» ¾µ ¼ö ÀÖ´Ù. ´ç½ÅÀÌ Ç×»ó ½Éº¼À» Á¦°ÅÇÏ°í, ÀÌ ¿É¼ÇÀÌ ºÒÇÊ¿äÇÑ°ÍÀ̶ó¸é, ±×³É ÆíÇÏ°Ô ´À²¸¶ó. ÇÏÁö¸¸, ÀÌ°ÍÀº ´ú À¯¿¬ÇÑ ¹æ¹ýÀÏ °ÍÀÌ´Ù. 5.6. ¸Å¿ì ÀÛÀº ½ÇÇàÈÀϵé´ç½ÅÀº Whirlwind Tutorial on Creating Really Teensy ELF Executables for Linux¹®¼°¡ À¯¿ëÇÏ´Ù´Â °ÍÀ» ¾Ë°ÍÀÌ´Ù. ÀÌ°ÍÀº ¸Å¿ìÀÛÀº ÇÁ·Î±×·¥µéÀÌ ¾î¶»°Ô ¸¸µå´ÂÁö ¼³¸íÇÑ´Ù. »ç½Ç, ÀϹÝÀûÀÎ »óȲ¿¡¼ ÀÌ·± Æ®¸¯À» »ç¿ëÇÒ ÇÊ¿ä´Â ¾ø´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀº ELF°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö º¸¿©ÁÖ´Â ÁÁÀº¿¹ÀÌ´Ù. 5.7. C++ÃʱâÈ ¼Óµµ ³ôÀ̱âKDE °³¹ßÀÚ´Â ¸¹ÀÌ Àç ¹èÄ¡¸¦ ÇؾßÇÏ°Ô¶§¹®¿¡ Å« GUI C++ÀÀ¿ëÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇϴµ¥ ¿À·¡°É¸°´Ù´Â °ÍÀ» ¾È´Ù. ÀÌ°Í¿¡ ¿©·¯°¡Áö ÇØ°áÃ¥ÀÌ ÀÖ´Ù. ´õ ¸¹Àº Á¤º¸¸¦ À§ÇØ Making C++ ready for the desktop (by Waldo Bastian)¸¦ Âü°íÇ϶ó. 6. ±×¿ÜÀÇ ¿¹Á¦µé´ÙÀ½ÀÇ ¿¹Á¦µéÀº ¸ðµç 3°¡Áö ¹æ¹ýµé(Á¤Àû, °øÀ¯, µ¿Àû ÀûÀç ¶óÀ̺귯¸®)ÀÇ ¿¹Á¦µéÀÌ´Ù. libhello.c´Â º¸ÅëÀÇ ¶óÀ̺귯¸®ÀÌ°í, libhello.h´Â Çì´õÆÄÀÏÀÌ´Ù. demo_use.c´Â º¸ÅëÀÇ ¶óÀ̺귯¸® È£Ãâ ÆÄÀÏÀÌ´Ù. ´ÙÀ½À¸·Î, Á¤Àû, °øÀ¯ ¶óÀ̺귯¸®¸¦ ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö º¸¿©ÁÖ´Â script_static, script_dynamic ½ºÅ©¸³Æ®°¡ ³ª¿Â´Ù. ±×¸®°í, °øÀ¯ ¶óÀ̺귯¸®¸¦ µ¿Àû ÀûÀç ¶óÀ̺귯¸®·Î ¾î¶»°Ô »ç¿ëÇÏ´ÂÁö º¸¿©ÁÖ´Â demo_dynamic.c, script_dynamicÀÌ ³ª¿Â´Ù. 6.1. File libhello.c
6.3. File demo_use.c
6.4. File script_static
6.5. File script_shared
6.6. File demo_dynamic.c
6.7. File script_dynamic
7. ±× ¿ÜÀÇ Á¤º¸µé¶óÀ̺귯¸®¿¡ ´ëÇÑ À¯¿ëÇÑ Á¤º¸´Â ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ´Ù:
8. Copyright and LicenseÀÌ ¹®¼´Â Copyright (C) 2000 David A. Wheeler¿¡ ÀÇÇØ ÀúÀÛ±ÇÀÌ ÀÖ´Ù. ÀÌ ¹®¼´Â GNU General License(GPL)À» µû¸¥´Ù. ´ç½ÅÀº ÀÌ ¹®¼¸¦ °øÂ¥·Î Àç ¹èÆ÷ ÇÒ ¼ö ÀÖ´Ù. ÀÌ ¹®¼ÀÇ ¼Ò½º¸¦ ``ÇÁ·Î±×·¥''°ú ÇÔ²² ¹ø¿ªÇÏ°í, ´ÙÀ½°ú °°Àº °ÍµéÀ» µû¸£¶ó.
À̰͵éÀº ´Ù¸¥ À¥»çƼƮ¿¡¼ ¹Ì·¯¸µÀ» Çã¶ôÇÑ´Ù. ÇÏÁö¸¸, ´ÙÀ½°ÍµéÀ» ºÎŹÇÑ´Ù:
³ª¸¦ ÁÖ·Î ±ÍÂú°Ô ÇÏ´Â 2°¡ÁöÁßÀÇ Çϳª´Â Áö³ª°£ ¹ö±×µé¿¡ ´ëÇÑ À̾߱⸦ °è¼Ó ÇÏ´Â °ÍÀÌ´Ù. ´ç½ÅÀÌ ÀÌ ¹®¼ÀÇ ¹Ì·¯¸µÀ» Á¦´ë·Î ÇÏ°í ÀÖ´Ù¸é, ³ª´Â ´ç½Å¿¡°Ô¼ ¸î³âÀü¿¡ °íÃÄÁø ¹ö±×¿¡ °üÇÑ ¾ê±â¸¦ µèÁö ¾Ê¾Æµµ µÈ´Ù. ¿øº» »çÀÌÆ®¸¦ ¹Ì·¯ÇÑ´Ù¸é, »ç¿ëÀÚµéÀº ´ç½ÅÀÇ ¹Ì·¯»çÀÌÆ®°¡ »õ·Î¿î°ÍÀÎÁö üũÇÒ ¼ö ÀÖ´Ù. ³ª´Â ¸Å¿ì º¸¾È ¹®Á¦¿¡ ½ÅÁßÇϱ⶧¹®¿¡ ÀϹÝÀûÀÎ ÀÎÅͳÝÁ¢¼ÓÀº ÇÏÁö ¾Ê´Â´Ù; ¸¸¾à ÀÌ°ÍÀÌ ´ç½Å¿¡°Ô ¹®Á¦°¡ µÈ´Ù¸é, ´Ù¸¥ ¹æ¹ýÀ» ã¾Æ¼, ´ç½ÅÀÇ È¯°æ¿¡¼ ¶§¶§·Î üũ¸¦ ÇÏ¸é¼ ¾÷µ¥ÀÌÆ®¸¦ Ç϶ó. ÀÌ ¶óÀ̼¾½º¿¡ ÀÇÇØ, ´ç½ÅÀÌ ¹®¼¸¦ º¯°æÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸, ´ç½ÅÀÌ ¾²Áö ¾ÊÀº°ÍÀ» ´ç½Å²¨¶ó°í ÇÒ ¼ö ¾ø´Ù(µû¶ó¼, Ç¥ÀýÀÌ´Ù). ¶ÇÇÑ, °³Á¤ÆÇÀÌ ¿øº»°ú °°Àº°ÍÀ̶ó°í ÇÒ ¼öµµ ¾ø´Ù. ÀÛ¾÷À» °³Á¤ÇÔÀ¸·Î¼, ÀüºÎ°¡ ´ç½ÅÀÇ ÆDZÇÀº ¾Æ´Ï´Ù; ÀÌ°ÍÀº ÆDZÇÀǹý¿¡ ÀÇÇÑ ``°ø°øÀÇ''ÀÏÀº ¾Æ´Ï´Ù. ÀÚ¼¼ÇÑ°ÍÀº ¶óÀ̼¾½º¸¦ ã¾Æº¸¶ó, Ưº°È÷ ``´ç½ÅÀº ÆÄÀÏÀÌ ¹Ù²ï°Í¿¡´ëÇÑ Å« º¯È¸¦ ¾²°í, ¾ðÁ¦ ¹Ù²î¾ú´ÂÁö °³Á¤µÈ ÆÄÀÏ¿¡ ¸í½ÃÇ϶ó''¶ó´Â °ÍÀ» ÁÖÀÇÇ϶ó. ¶óÀ̼¾½º°¡ ¹«¾ùÀ» Çã¿ëÇÏ´ÂÁö ¾Ë°í ½ÍÀ¸¸é, ³ª¿¡°Ô ¿¬¶ôÇ϶ó. ´ëºÎºÐÀÇ °æ¿ì, ´ç½ÅÀÌ ¹Ù²Û°ÍÀ» ÁÖ ÁýÇÊÀÚ(ÇöÀç´Â David A. Wheeler)¿¡°Ô º¸³»´Â °ÍÀÌ ÁÁ´Ù. ±×·¯¸é, ´ç½ÅÀÌ º¯È½ÃŲ°ÍÀÌ ¿øº»¿¡ Ãß°¡µÇ¾î¼ ¸ðµç »ç¶÷ÀÌ º¸°Ô µÉ°ÍÀÌ´Ù. |