3. °øÀ¯ ¶óÀ̺귯¸®

°øÀ¯ ¶óÀ̺귯¸®´Â ÇÁ·Î±×·¥ÀÌ ½ÃÀÛÇÒ¶§ ÀûÀçµÇ´Â ¶óÀ̺귯¸®ÀÌ´Ù. °øÀ¯ ¶óÀ̺귯¸®°¡ Á¦´ë·Î ¼³Ä¡µÈ´Ù¸é, ±×´ÙÀ½¿¡ ½ÃÀÛÇÏ´Â ¸ðµç ÇÁ·Î±×·¥Àº ÀÚµ¿ÀûÀ¸·Î »õ °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÑ´Ù. À̰ÍÀº ÈξÀ ´õ À¯¿¬¼º ÀÖ°í, ¹ßÀüµÈ°ÍÀÌ´Ù. ¿Ö³ÄÇϸé, ¸®´ª½º¿¡¼­ »ç¿ëÇÏ´Â ¹æ¹ýÀº ´ç½Å¿¡°Ô ´ÙÀ½°ú °°Àº °ÍµéÀ» Çã¿ëÇϱ⠶§¹®ÀÌ´Ù:

3.1. °ü·Êµé(Conventions)

ÀÌ ¿øÇÏ´Â ¸ðµç ±â´ÉÀ» Áö¿øÇÏ´Â °øÀ¯ ¶óÀ̺귯¸®¿¡ ´ëÇØ, ¸¹Àº °ü·Ê¿Í ÁöħÀÌ µû¶óÁÖ¾î¾ß ÇÑ´Ù. ´ç½ÅÀº ¶óÀ̺귯¸®ÀÇ À̸§ÀÇ Â÷À̸¦ ¾Ë¾Æ¾ß ÇÑ´Ù. Ưº°È÷, ºÒ¸®´Â À̸§``soname''°ú ½ÇÁ¦À̸§``real name''¿¡ ´ëÇØ¼­ ¾Ë¾Æ¾ß ÇÑ´Ù(±×¸®°í À̰͵éÀÌ ¾î¶»°Ô »óÈ£ÀÛ¿ëÇÏ´ÂÁö¸¦). ´ç½ÅÀº ¶ÇÇÑ À̰͵éÀÌ ÆÄÀϽýºÅÛÀÇ ¾î´ÀºÎºÐ¿¡ À§Ä¡ÇÏ´ÂÁö ¾Ë¾Æ¾ß ÇÑ´Ù.

3.1.1. °øÀ¯ ¶óÀ̺귯¸® À̸§µé

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

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

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

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

ldconfig´Â ¸µÄ¿ À̸§À» ¸¸µéÁö´Â ¾Ê´Â´Ù; º¸Åë À̰ÍÀº ¶óÀ̺귯¸® ¼³Ä¡ÇÒ¶§ ¸¸µé¾îÁö°í, ¸µÄ¿ À̸§Àº ``°¡ÀåÃÖ±ÙÀÇ'' ºÒ¸®´Â À̸§À̳ª ½ÇÁ¦ À̸§À¸·Î ¸¸µé¾îÁø´Ù. ³ª´Â ¸µÄ¿ À̸§À» ºÒ¸®´Â À̸§ÀÇ ½Éº¼¸¯ ¸µÅ©·Î »ç¿ëÇÒ °ÍÀ» ÃßõÇÑ´Ù. ¿Ö³ÄÇϸé, ´ëºÎºÐÀÇ °æ¿ì ´ç½ÅÀÌ ¶óÀ̺귯¸®¸¦ ¾÷µ¥ÀÌÆ® ÇÑ´Ù¸é, ´ç½ÅÀº ¸µÅ© ½Ãų¶§¿¡ ÀÚµ¿ÀûÀ¸·Î »ç¿ëÇÏ°í ½Í¾îÇÒ °ÍÀ̱⠶§¹®ÀÌ´Ù. ³ª´Â H. J. Lu¿¡°Ô ¿Ö ldconfig°¡ ÀÚµ¿ÀûÀ¸·Î ¸µÄ¿À̸§À» ¸¸µé¾îÁÖÁö ¾Ê³Ä°í ¹°¾îº¸¾Ò´Ù. ±×ÀÇ ¼³¸íÀº ÀÌ·¸´Ù. ¾Æ¸¶ ´ç½ÅÀ» ÃֽŹöÀüÀÇ ¶óÀ̺귯¸® Äڵ带 µ¹¸®°í ½Í¾îÇÒÁö ¸ð¸¥´Ù. ÇÏÁö¸¸, ±× ´ë½Å¿¡ ¿¹ÀüÀÇ(¾Æ¸¶µµ ȣȯµÇÁö ¾Ê´Â) ¹öÀüÀÇ ¶óÀ̺귯¸®·Î °³¹ßÇÏ°í ½Í¾îÇÒ ¼ö µµ ÀÖ´Ù. µû¶ó¼­, ldconfig´Â ÇÁ·Î±×·¥ÀÌ ¾î¶² ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ °ÍÀÎÁö ¾î¶² °¡Á¤µµ Çϰí ÀÖÁö ¾Ê´Ù. µû¶ó¼­, ¼³Ä¡ÀÚ´Â ¸µÄ¿°¡ ¾î¶² ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ°ÍÀÌÁö¿¡ ´ëÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ Ưº°È÷ ¼öÁ¤ÇØ ÁÖ¾î¾ß ÇÑ´Ù.

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

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¿¡ ÀúÀåÇÏÁö ¾Ê´Â´Ù. ³ª´Â À̰ÍÀÌ ¹ö±×¶ó°í »ý°¢ÇÑ´Ù. µû¶ó¼­, Red Hat±â¹Ý ½Ã½ºÅÛ¿¡¼­ ¸¹Àº ÇÁ·Î±×·¥À» µ¹¸®±â À§ÇØ /etc/ld.so.conf¿¡ /usr/local/libÀ» Ãß°¡Çϴ°ÍÀº ¹ö±× ``ÇȽº''ÀÌ´Ù.

¶óÀ̺귯¸®¿¡ ¸î°³ÀÇ ÇÔ¼ö¸¦ Ãß°¡ÇÏ°í ½ÍÀºµ¥, ¶óÀ̺귯¸®ÀÇ ³ª¸ÓÁö ºÎºÐÀ» À¯ÁöÇÏ°í ½Í´Ù¸é, ¿À¹ö¶óÀ̵åÇÏ´Â ¶óÀ̺귯¸®ÀÇ À̸§(.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¸¦ »ç¿ëÇÒ °ÍÀ̰í, ½ÇÇà°¡´É ÇÁ·Î±×·¥À» µ¹¸± °ÍÀÌ´Ù.
  /lib/ld-linux.so.2 --library-path PATH EXECUTABLE
ÀÎÀÚ¾øÀÌ ld-linux.so¸¦ µ¹¸®´Â °ÍÀº ´ç½ÅÀÌ ÀÌ·¸°Ô »ç¿ëÇϴµ¥¿¡ µµ¿òÀ» ÁÙ °ÍÀÌ´Ù. ÇÏÁö¸¸, À̰ÍÀ» º¸ÅëÀÇ ¿ëµµ·Î »ç¿ëÇÏÁö ¸¶¶ó. À̰͵éÀº µð¹ö±ë¿ëÀÌ´Ù.

3.3.2. LD_DEBUG

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

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¿É¼ÇÀº ``À§Ä¡¿¡ µ¶¸³ÀûÀÎ ÄÚµå''¸¦ ¸¸µé¾îÁÖ°í, °øÀ¯ ¶óÀ̺귯¸®ÀÇ Á¶°ÇÀ» ¸¸Á·½ÃŲ´Ù; ¾Æ·¡ÀÇ Â÷ÀÌÁ¡À» º¸¶ó. ±×¸®°í ÀÌ Çü½ÄÀ» µû¶ó¼­ °øÀ¯¶óÀ̺귯¸®¸¦ ¸¸µé¾î¶ó:

gcc -shared -Wl,-soname,your_soname \
    -o library_name file_list library_list

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

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

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

°³¹ß°úÁ¤µ¿¾È, ´Ù¸¥ ¸¹Àº ÇÁ·Î±×·¥¿¡¼­ »ç¿ëµÇ´Â ¶óÀ̺귯¸®¸¦ ¼öÁ¤ÇÏ°í ½ÍÀ»¶§°¡ ÀÖÀ» °ÍÀÌ´Ù -- ±×¸®°í ´ç½ÅÀº ÇÁ·Î±×·¥µéÀÌ ``°³¹ß»óÀÇ''¶óÀ̺귯¸®¸¦ »ç¿ëÇϴ°ÍÀ» ¿øÄ¡ ¾ÊÀ» °ÍÀ̰í, ¾î¶² ƯÁ¤ ÀÀ¿ëÇÁ·Î±×·¥¸¸ÀÌ ±×°ÍÀ» »ç¿ëÇϱ⸦ ¿øÇÒ°ÍÀÌ´Ù. ldÀÇ ``rpath''¿É¼ÇÀº ¾î¶² ƯÁ¤ÇÑ ÇÁ·Î±×·¥ÀÌ ÄÄÆÄÀÏ µÉ ¶§ ½Ç½Ã°£À¸·Î ¶óÀ̺귯¸®ÀÇ ÆÐ½º¸¦ Á¤ÇØÁÖ´Â ¿ªÇÒÀ» ÇÑ´Ù. gcc¿¡¼­ ´ç½ÅÀº ´ÙÀ½°ú °°Àº ¹æ½ÄÀ¸·Î rpath¸¦ ÁöÁ¤ÇØ ÁÙ ¼ö ÀÖ´Ù:
 -Wl,-rpath,$(DEFAULT_LIB_INSTALL_PATH)
´ç½ÅÀÌ ¶óÀ̺귯¸® Ŭ¶óÀÌ¾ðÆ® ÇÁ·Î±×·¥À» ¼³Ä¡ÇÒ¶§ ÀÌ ¿É¼ÇÀ» »ç¿ëÇÑ´Ù¸é, ±×°ÍÀÌ Ãæµ¹À» ÀÏÀ¸Å°Áö ¾Ê°Å³ª, ¶óÀ̺귯¸®¸¦ ¼û±â´Â ´Ù¸¥ ±â¼úÀ» »ç¿ëÇϵµ·Ï ÇϱâÀ§ÇØ LD_LIBRARY_PATH¸¦ »ç¿ëÇÏ´Â °ÍÀ» °ÆÁ¤ÇÒ Çʿ䰡 ¾ø´Ù.

3.5. °øÀ¯ ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÏ°í »ç¿ëÇϱâ

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

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

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

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

LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH  my_program

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

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

´ç½ÅÀº °øÀ¯ ¶óÀ̺귯¸®ÀÇ ¸®½ºÆ®¸¦ ldd(1)À» »ç¿ëÇØ¼­ º¼¼ö ÀÖ´Ù. µû¶ó¼­, ¿¹¸¦µé¾î ´ç½ÅÀº ls¿¡ »ç¿ëµÇ´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ º¼ ¼ö ÀÖ´Ù.
  ldd /bin/ls
ÀϹÝÀûÀ¸·Î ´ç½ÅÀº ±× À̸§ÀÌ ¼ÓÇØÀÖ´Â µð·ºÅ丮¿¡ µû¶ó °ü°èµÇ´Â ºÒ¸®´Â À̸§ÀÇ ¸ñ·ÏÀ» º¼ °ÍÀÌ´Ù. Ưº°È÷ ¸ðµç °æ¿ì¿¡¼­ ´ÙÀ½ÀÇ µÎ°¡ÁöÀÇ ÀÇÁ¸¼ºÀ» °¡Áú°ÍÀÌ´Ù:

ÁÖÀÇ : ´ç½ÅÀÌ ½Å·ÚÇÏÁö ¾Ê´Â ÇÁ·Î±×·¥¿¡ ldd¸¦ ½ÇÇà½ÃŰÁö ¸»¾Æ¶ó. ldd(1) ¸Å´º¾óÀ» º¸¸é È®½ÇÇϰÚÁö¸¸, ldd´Â (¾î¶² °æ¿ìµé¿¡ À־) ȯ°æº¯¼ö¸¦ ¼³Á¤Çϰí(ELF ¿ÀºêÁ§Æ®³ª, LD_TRACE_LOADED_OBJECTS) ÇÁ·Î±×·¥À» ½ÇÇà½ÃÅ´À¸·Î¼­ µ¿ÀÛÇÑ´Ù. À̰ÍÀº ½Å·ÚÇÏÁö ¸øÇÏ´Â ÇÁ·Î±×·¥¿¡ À־ (lddÀÇ Á¤º¸¸¦ º¸¿©ÁÖ´Â°Í ´ë½Å¿¡) ÀÓÀÇÀÇ Äڵ带 ½ÇÇà½Ãų ¼ö ÀÖ´Ù. µû¶ó¼­, ¾ÈÀüÀ» À§Çؼ­ ´ç½ÅÀÌ ½Å·ÚÇÏÁö ¸øÇÏ´Â ÇÁ·Î±×·¥Àº ldd¸¦ »ç¿ëÇÏÁö ¸»¾Æ¶ó.

3.6. ȣȯµÇÁö ¾Ê´Â ¶óÀ̺귯¸®µé

»õ¹öÀüÀÇ ¶óÀ̺귯¸®°¡ ¿¹Àü¹öÀü°ú ÀÌÁø-ȣȯÀÌ ¾ÈµÈ´Ù¸é, ºÒ·ÁÁö´Â À̸§ÀÌ ¹Ù²î¾î¾ß ÇÑ´Ù. C¿¡¼­´Â ÀÌÁø ȣȯÀÌ ¾ÈµÇ°Ô µÇ´Â 4°¡Áö ±âº» °æ¿ì°¡ ÀÖ´Ù.

  1. ÇÔ¼öÀÇ ³»¿ëÀÌ ¹Ù²î¾î¼­ º»·¡ÀÇ ½ºÆå°ú ¸Â°Ô µ¿ÀÛÇÏÁö ¾Ê´Â °æ¿ì.

  2. ¼öÃâµÈ(exported) µ¥ÀÌŸ ¾ÆÀÌÅÛÀÌ º¯ÇѰæ¿ì(¿¹¿Ü : µ¥ÀÌÅÍ ±¸Á¶°¡ °è¼Ó ¶óÀ̺귯¸® ³»¿¡ Á¸ÀçÇÑ´Ù¸é, µ¥ÀÌÅÍ ±¸Á¶ÀÇ ³»ºÎ¿¡ ¾ÆÀÌÅÛÀ» Ãß°¡ÇÏ´Â °ÍÀº ±¦Âú´Ù)

  3. exported ÇÔ¼ö°¡ Á¦°ÅµÉ °æ¿ì

  4. exported ÇÔ¼öÀÇ ÀÎÅÍÆäÀ̽º°¡ º¯ÇÒ °æ¿ì

ÀÌ·±°æ¿ì¸¦ ÇÇÇÏ·ÁÇÑ´Ù¸é, ÀÌÁø-ȣȯÀÌ µÇ°Ô ¶óÀ̺귯¸®¸¦ À¯ÁöÇÒ ¼ö ÀÖ´Ù. ´Ù½Ã ¸»Çؼ­ ±×·±°æ¿ì¸¦ ÇÇÇÏ°í ½Í´Ù¸é ÀÀ¿ë ÀÌÁø ÀÎÅÍÆäÀ̽º(ABI=Application Binary Interface)¸¦ ÇÒ ¼ö ÀÖ´Ù. ¿¹µéµé¾î, ¿¹Àü°ÍµéÀ» Áö¿ìÁö ¾Ê°í »õ·Î¿î ÇÔ¼ö¸¦ Ãß°¡ÇÏ°í ½ÍÀ» ¼ö ÀÖ´Ù. ´ç½ÅÀº ±¸Á¶¿¡ »õ·Î¿î ¾ÆÀÌÅÛÀ» Ãß°¡ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸, ¿¹Àü ÇÁ·Î±×·¥ÀÌ »õ·Î¿î ¾ÆÀÌÅÛÀ» Ãß°¡ÇÑ ±¸Á¶¸¦ ÀνÄÇÏÁö ¸øÇѴٰųª (ÇÁ·Î±×·¥ÀÌ ¾Æ´Ñ)¶óÀ̺귯¸®°¡ »õ·Î¿î °ø°£À» ÇÒ´çÇÏÁö ¸øÇϰųª, Ãß°¡ÀÇ ¾ÆÀÌÅÛÀ» ¿É¼ÇÀ¸·Î ¸¸µå´Â°Í(¶Ç´Â ¶óÀ̺귯¸®°¡ ±×°ÍµéÀ» ä¿ì°Ô Çϴ°Í)µîµîÀ» È®½ÇÈ÷ ÇØ¾ßÇÑ´Ù´Â °ÍÀ» ÁÖÀÇÇ϶ó. ÁÖÀÇÇ϶ó - À¯Àú°¡ ¹è¿­¿¡ ±¸Á¶¸¦ »ç¿ëÇϰí ÀÖ´Ù¸é ´ç½ÅÀº ¹è¿­ÀÇ ±¸Á¶¸¦ ´Ã¸±¼ö ¾ø´Ù.

C++(±×¸®°í ÄÄÆÄÀÏµÈ ÅÛÇø´À̳ª ´Ù¸¥ µð½ºÆÐÄ¡µÈ ¸Þ¼Òµå¸¦ Áö¿øÇÏ´Â ¾ð¾î)¿¡¼­ »óȲÀº ±³¹¦ÇØÁø´Ù. À§ÀÇ ¸ðµç »óȲÀÌ ÀÌ·ç¾îÁ®¾ß Çϰí, ´õ ÇØÁÖ¾î¾ß ÇÒ À̽´µéÀÌ ÀÖ´Ù. »óȲÀº ÄÄÆÄÀÏµÈ Äڵ忡¼­ ``º¸ÀÌÁö ¾Ê°Ô'' ±¸ÇöµÇ±â ¶§¹®¿¡ C++ÀÌ ¾î¶»°Ô ±¸ÇöµÇ¾ú´ÂÁö ¾ËÁö ¸øÇÏ¸é ¾Ö¸Å¸ðÈ£ÇØÁö´Â ÀÇÁ¸¼ºÀ» ³º´Â Á¤º¸µé ¶§¹®¿¡ ÀϾ´Ù. ¾ö¹ÐÇÏ°Ô ¸»Çϸé, À̰ÍÀº ``»õ·Î¿î'' À̽´´Â ¾Æ´Ï´Ù. ´ÜÁö, ÄÄÆÄÀÏµÈ C++Äڵ尡 ³Ê¿¡°Ô ³î¶ó°Ô ÇÒ ¼ö ÀÖÀ»°ÍÀÌ´Ù. ´ÙÀ½¿¡ ³ª¿À´Â °ÍµéÀº (¾Æ¸¶µµ ºÎÁ·ÇϰÚÁö¸¸) Troll Tech's Technical FAQ¿¡ ³ª¿À´Â ÀÌÁø ȣȯÀ» À¯ÁöÇϱâ À§ÇØ C++¿¡¼­ »ç¿ëÇÏ¸é ¾ÈµÇ´Â °ÍµéÀÇ ¸ñ·ÏÀÌ´Ù.

  1. °¡»óÇÔ¼ö¸¦ Àç ±¸ÇöÇϴ°Í(±×·¸Áö ¾ÊÀ¸¸é ¿ø·¡ÀÇ ±¸Çö¿¡¼­´Â ¾ÈÀüÇÏ´Ù). ¿Ö³ÄÇϸé ÄÄÆÄÀÏ·¯´Â ÄÄÆÄÀϽÿ¡(¸µÅ©½Ã°¡ ¾Æ´Ï¶ó) SuperClass::virtualFunction()¸¦ ±¸Çϱ⠶§¹®ÀÌ´Ù.

  2. °¡»ó ¸â¹öÇÔ¼ö¸¦ ´õÇϰųª Á¦°ÅÇϴ°Í. ¿Ö³ÄÇϸé À̰ÍÀº ¸ðµç ¼­ºêŬ·¡½ºÀÇ vtlbÀÇ Å©±â¿Í ±¸Á¶¸¦ ¹Ù²Ù±â ¶§¹®ÀÌ´Ù.

  3. µ¥ÀÌÅÍ ¸â¹öÀÇ Å¸ÀÔÀ» ¹Ù²Ù°Å³ª ÀζóÀÎ ¸â¹öÇÔ¼ö¸¦ ÅëÇØ Á¢±ÙÇÒ ¼ö ÀÖ´Â µ¥ÀÌÅÍ ¸â¹ö¸¦ ¿Å±â´Â°Í.

  4. »õ ³ëµå¸¦ Ãß°¡ÇÏ´Â °Í À̿ܿ¡ Ŭ·¡½º ±¸Á¶¸¦ ¹Ù²Ù´Â°Í.

  5. privateµ¥ÀÌÅÍ ¸â¹ö¸¦ Ãß°¡Çϰųª »èÁ¦Çϴ°Í. ¿Ö³ÄÇϸé À̰ÍÀº ¸ðµç ¼­ºêŬ·¡½ºÀÇ Å©±â¿Í ±¸Á¶¸¦ ¹Ù²Ù±â ¶§¹®ÀÌ´Ù.

  6. ÀζóÀÎÀÌ ¾Æ´Ñ public, protected ¸â¹ö ÇÔ¼ö¸¦ Á¦°ÅÇϴ°Í.

  7. public, protected ¸â¹öÇÔ¼ö¸¦ inlineÀ¸·Î ¸¸µå´Â°Í.

  8. inlineÇÔ¼ö¸¦ ¹Ù²Ù¾î¼­, ¿¹Àü¹öÀüÀÌ Á¦´ë·Î ÀÛµ¿ÇÏÁö ¾Ê´Â°Í.

  9. Æ÷ÆÃÇÒ ÇÁ·Î±×·¥ÀÇ ¸â¹ö ÇÔ¼öÀÇ Á¢±Ù±ÇÇÑ(public, protected, private)À» ¹Ù²Ù´Â°Í. ¿Ö³ÄÇϸé, ¾î¶² ÄÄÆÄÀÏ·¯´Â ÇÔ¼öÀÇ À̸§¿¡ Á¢±Ù±ÇÇÑÀ» ºÙÀ̱⠶§¹®ÀÌ´Ù.

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