°øÀ¯ ¶óÀ̺귯¸®¶õ ÇÁ·Î±×·¥ÀÌ ½ÃÀÛµÉ ¶§ ÀÌ ÇÁ·Î±×·¥¿¡ ÀÇÇؼ ÀûÀçµÇ´Â ¶ó À̺귯¸®¸¦ ¸»ÇÑ´Ù. ¾î¶² °øÀ¯ ¶óÀ̺귯¸®°¡ ¹Ù¸£°Ô ÀûÀç¾ú´Ù¸é ÀÌÈÄ¿¡ ½ÇÇàµÇ ´Â ¸ðµç ÇÁ·Î±×·¥µéÀº ÀÚµ¿ÀûÀ¸·Î ÀÌ »õ·Î¿î °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ °ÍÀÌ ´Ù. ½ÇÀç¿¡ ÀÖ¾î¼, ¸®´ª½º¿¡¼ »ç¿ëµÇ´Â Á¢±Ù¹æ½ÄÀº ¾Æ·¡¿Í °°Àº ±â´ÉµéÀ» Çã ¿ëÇϹǷΠ´õ¿í ź·ÂÀûÀÌ¸ç ¶ÇÇÑ, ¼¼·ÃµÇ°Ô ±â´ÉÇÑ´Ù.
* ¶óÀ̺귯¸®¸¦ °»½ÅÇÏ¸é¼ ÀÌ ¶óÀ̺귯¸®ÀÇ ±¸¹öÀü Áö¿ø¿ë ¹öÀüÀÌ ¾øÀ̵µ ¿©ÀüÈ÷ ±¸ ¹öÀüÀÇ ¶óÀ̺귯¸®ÀÇ »ç¿ëÀ» ¿øÇÏ´Â ÇÁ·Î±×·¥À» Áö¿øÇÒ¼ö ÀÖ´Ù.
* ƯÁ¤ ÇÁ·Î±×·¥ÀÇ ¼öÇà½Ã ¶óÀ̺귯¸® ¶Ç´Â ½ÉÁö¾î ¶óÀ̺귯¸®ÀÇ Æ¯Á¤ÇÔ¼öÀÇ ¿À¹ö¶óÀ̵ù(´ëÄ¡)ÀÌ °¡´ÉÇÏ´Ù.
* ÀÌ ¸ðµç ±â´ÉÀ» ±âÁ¸ÀÇ ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ¿© ÇÁ·Î±×·¥ ½ÇÇàÁß¿¡ °¡´ÉÇÏ ´Ù.
°øÀ¯ ¶óÀ̺귯¸®°¡ ÀÌ·¯ÇÑ ±â´ÉµéÀ» Áö¿øÇϱâ À§Çؼ´Â »ç¿ëÀÚ°¡ ¹Ýµå½Ã µû ¶ó¾ßÇÒ ÀÌ¿ë»óÀÇ ¸î°¡Áö °ü·Ê¿Í °¡À̵å¶óÀÎÀÌ ÀÖ´Ù. ´ç½ÅÀº ÇÑ ¶óÀ̺귯¸®¸¦ ÀÏÄ´ À̸§µéÀÇ Â÷ÀÌ Æ¯È÷ "soname"°ú "real name"À» ±¸º°ÇÒ¼ö ÀÖ¾î¾ßÇÏ ¸ç, (¶ÇÇÑ À̵éÀÌ ¾î¶»°Ô »óÈ£ÀÛ¿ë Çϴ°¡µµ ¾Ë¾Æ¾ß ÇÑ´Ù) ¶ÇÇÑ, ¶óÀ̺귯¸®°¡ ÆÄÀÏ ½Ã½ºÅÛ»óÀÇ ¾îµð¿¡ À§Ä¡ÇØ¾ß Çϴ°¡µµ ¾Ë¾Æ¾ß ÇÑ´Ù.
¸ðµç °øÀ¯ ¶óÀ̺귯¸®´Â "soname"À̶ó ºÒ¸®´Â Ưº°ÇÑ À̸§À» °¡Áö°í ÀÖ´Ù. "soname"Àº Á¢µÎ¾î "lib", ¶óÀ̺귯¸® À̸§, ".so"¶ó´Â ¹®±¸, ±× ´ÙÀ½ ¸¶Ä§Ç¥¿Í ÀÎÅÍÆäÀ̽º º¯°æ½Ã Áõ°¡µÇ´Â ¹öÀü ³Ñ¹ö·Î ±¸¼ºµÈ´Ù. ( ¿¹¿Ü·Î °¡Àå Àú¼öÁØÀÇ C¶óÀ̺귯¸®µéÀº "lib"·Î ½ÃÀÛµÇÁö ¾Ê´Â´Ù) ¿ÏÀüÇÑ °ø½ÄÀû "soname"¿¡´Â ¶óÀÌ ºê·¯¸®°¡ ¼ÓÇÑ µð·ºÅ丮¸íÀÌ ¾ÕºÎºÐ¿¡ µé¾î°£´Ù. ¿î¿ëÁßÀÎ ½Ã½ºÅÛ¿¡¼´Â ¿ÏÀü ÇÑ °ø½ÄÀû "soname" À̶õ °øÀ¯¶óÀ̺귯¸®ÀÇ ½ÇÁ¦ À̸§("real name")¿¡ ´ëÇÑ ½Éº¼¸¯ ¸µÅ©(½ÇÁ¦ Äڵ带 ´ã°íÀÖ´Â ÆÄÀÏÀÌ ¾Æ´Ñ)°¡ µÉ °ÍÀÌ´Ù.
¸ðµç °øÀ¯ ¶óÀ̺귯¸®´Â ½ÇÁ¦ ¶óÀ̺귯¸® Äڵ尡 ÀúÀåµÇ¾î ÀÖ´Â ÆÄÀÏÀÇ ÆÄÀÏ ¸íÀÎ "real name"À» ¶ÇÇÑ °¡Áø´Ù. ½ÇÁ¦ ÆÄÀϸíÀº "soname"¿¡ ¸¶Ä§Ç¥¿Í ¸¶ÀÌ³Ê ¹öÀü ³Ñ¹ö, ¸¶Ä§Ç¥ ±×¸®°í ¸±¸®Áî ³Ñ¹ö¸¦ ´õÇÑ °ÍÀÌ´Ù. ¸±¸®Áî ³Ñ¹ö´Â ¼±Åûç Ç×ÀÌ´Ù. ¸¶ÀÌ³Ê ³Ñ¹ö¿Í ¸±¸®Áî ³Ñ¹ö·Î Á¤È®È÷ ¾î¶² ¹öÀüÀÇ ¶óÀ̺귯¸®°¡ ¼³Ä¡ µÇ¾î ÀÖ´ÂÁö ¾Ë°Ô ÇÔÀ¸·Î½á ½Ã½ºÅÛ ±¸¼ºÀ» Á¶ÀýÇÒ¼ö ÀÖ´Ù. ÀÌ ¹øÈ£µéÀº ¶óÀÌºê ·¯¸®¸¦ ±â¼úÇϱâÀ§ÇÑ ¹®¼È½Ã¿¡ »ç¿ëµÈ ¹øÈ£¿Í ¸ÂÁö ¾ÊÀ»¼öµµ ÀÖÀ½¿¡ À¯ÀÇÇÏ ¶ó. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ¶óÀ̺귯¸®ÀÇ ¹®¼È°¡ ´õ ¿ëÀÌÇØÁø´Ù.
ºÎ°¡ÀûÀ¸·Î ÄÄÆÄÀÏ·¯°¡ ¶óÀ̺귯¸®¸¦ ¿ä±¸ÇÒ ¶§ »ç¿ëÇÏ´Â À̸§ÀÌ Çϳª ´õ Á¸ ÀçÇÑ´Ù.(³ª´Â À̸¦ "linker name"À̶ó ÀÏÄÃÀ» °ÍÀÌ´Ù.) ¿©±â¿¡´Â ¾î¶°ÇÑ ¹öÀü³Ñ ¹öµµ Æ÷ÇÔµÇÁö ¾Ê´Â "soname"ÀÌ ÇØ´çµÈ´Ù. °øÀ¯ ¶óÀ̺귯¸®¸¦ °ü¸®ÇÏ´Â ÇÙ½ÉÀº ÀÌ·¯ÇÑ À̸§µéÀ» Àß ºÐº°ÇÏ´Â °ÍÀÌ´Ù. ÇÁ ·Î±×·¥¿¡¼ ÇÊ¿äÇÑ °øÀ¯ ¶óÀ̺귯¸®¸¦ ³»ºÎÀûÀ¸·Î Ç¥ÇöÇÒ¶§´Â ±× ¶óÀ̺귯¸® ÀÇ "soname"À» ½á¾ßÇÑ´Ù. ¹Ý´ë·Î ¸¸¾à¿¡ ´ç½ÅÀÌ °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µé¾ú´Ù ¸é ÀÚ¼¼ÇÑ ¹öÀü Á¤º¸¸¦ Æ÷ÇÔÇÑ ½ÇÁ¦ ÆÄÀϸíÀ» ÁÖ¾î¾ß ÇÑ´Ù. ´ç½ÅÀÌ »õ·Î¿î ¹ö ÀüÀÇ ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÒ¶§´Â ¸î °³ÀÇ Á¤ÇØÁø µð·ºÅ丮µéÁßÀÇ ÇÑ°÷¿¡ ¼³Ä¡ÇÑ µÚ¿¡ ldconfig¶ó´Â ÇÁ·Î±×·¥À» ½ÇÇàÇÏ¿©¾ß ÇÑ´Ù. ldconfig´Â µð·ºÅ丮¿¡ Á¸ÀçÇÏ ´Â ÆÄÀϵéÀ» Á¡°ËÇÑ µÚ ½ÇÁ¦ ÆÄÀϸíÀÇ ½Éº¼¸¯ ¸µÅ©·Î½á sonameÀ» »ý¼ºÇÏ¸ç µ¿½Ã¿¡ ij½¬ ÆÄÀÏÀÎ /etc/ld.so.cache¸¦ ¼ÂÆÃÇÑ´Ù.
ldconfig´Â linker nameÀ» ¼ÂÆÃÇÏÁö ¾Ê´Â´Ù. ÀÌ°ÍÀº º¸Åë ¶óÀ̺귯¸®ÀÇ ¼³Ä¡ ½Ã¿¡ ¼ÂÆÃÀ» Çϴµ¥, °£´ÜÇÏ°Ô °¡Àå ÃÖ±ÙÀÇ sonameÀ̳ª real name¿¡ ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µé¸é µÈ´Ù. ´ëºÎºÐÀÇ °æ¿ì ¶óÀ̺귯¸®¸¦ °»½ÅÇÏ°í ÀÚµ¿ÀûÀ¸·Î ¸µÅ©½Ã ¿¡ »ç¿ëÇϱ⸦ ¿øÇÒ°ÍÀ̹ǷΠsoname¿¡ ½Éº¼¸¯ ¸µÅ©Çϱ⸦ ±ÇÀåÇÑ´Ù. H. J. Lu ¿¡°Ô ldconfig°¡ ¿Ö ÀÚµ¿À¸·Î linker nameÀ» ¼ÂÆÃÇÏÁö ¾Ê´À³Ä°í ¹°¾ú´õ´Ï ±× ÀÇ ¼³¸íÀº °¡Àå ÃÖ±ÙÀÇ ¶óÀ̺귯¸®·Î ¸µÅ©½ÃÅ°°í ½ÍÀ»¶§°¡ ÀÖÀ»°ÍÀÌ¸ç ¶ÇÇÑ ÀÌÀü ¹öÀüÀÇ ¶óÀ̺귯¸®¸¦ °³¹ßÇϰųªÇÒ ¶§ ±×°ÍÀ» ¸µÅ©ÇÏ·Á ÇÒ ¶§°¡ ÀÖÀ¸¹Ç ·Î ldconfig´Â ¿©·¯ºÐÀÌ ¾î¶² ¶óÀ̺귯¸®¿Í ¸µÅ©ÇÏ°í ½ÍÀºÁö °¡Á¤ÇÏÁö ¾Ê´Â °ÍÀÌ¸ç ±×·¡¼ ¼³Ä¡ÀÚ´Â ¾î¶² ¶óÀ̺귯¸®°¡ ¸µÅ©µÉ°ÍÀÎÁö¸¦ ¸í½ÃÇØ¾ß ÇÏ´Â°Í À̶ó Çß´Ù.
ÀÌ»óÀÇ ¾ê±â¸¦ Á¾ÇÕÇÑ ¿¹¸¦ µé¾îº¸¸é ldconfig°¡ /usr/lib/libreadline.so.3.0°ú °°Àº real nameÀÇ ½Éº¼¸¯ ¸µÅ©·Î ¼ÂÆÃÇÑ /usr/lib/libreadline.so.3 ÇüÅÂÀÇ ¿Ï ÀüÇÑ °ø½ÄÀû sonameÀÌ ÀÖÀ»°ÍÀ̸ç /usr/lib/libreadline.so.3¿¡ ½Éº¼¸¯ ¸µÅ©µÈ link nameÀ¸·Î½á /usr/lib/libreadline.so°¡ ¶ÇÇÑ ÀÖÀ» °ÍÀÌ´Ù.
°øÀ¯ ¶óÀ̺귯¸®´Â ÆÄÀÏ ½Ã½ºÅÛ »óÀÇ Æ¯Á¤À§Ä¡¿¡ Á¸ÀçÇؾßÇÑ´Ù. ¿ÀÇ ¼Ò½º ¼Ò ÇÁÆ®¿þ¾îµéÀº GNUÀÇ Ç¥ÁØÀ» µû¸£´Â °æÇâÀÌ ÀÖÀ¸¸ç ´õ ÀÚ¼¼ÇÑ ³»¿ëÀº info¹® ¼ÀÇ [13]info:standards#Directory_Variables ºÎºÐÀ» »ìÆ캸±æ ¹Ù¶õ´Ù. GNU Ç¥ ÁØÀº ¼Ò½ºÄÚµåÀÇ ¹èÆ÷½Ã¿¡ ¸ðµç ¶óÀ̺귯¸®¸¦ /usr/local/lib¿¡ ¼³Ä¡ÇÏ±æ ±Ç ÀåÇÑ´Ù(/usr/local/bin¿¡´Â ¸í·ÉµéÀÌ ¸ðÀÓ). GNUÇ¥ÁØÀº ¶ÇÇÑ ÀÌ·¯ÇÑ µðÆúÆ®µé À» ¹«½ÃÇϰųª ¼³Ä¡·çƾÀ» È£ÃâÇÏ´Â ÀýÂ÷ µî¿¡ °üÇÑ °ü·ÊµéÀ» Á¤ÀÇÇÏ°í ÀÖ´Ù. ÆÄÀϽýºÅÛ °èÃþÀû ±¸Á¶Ç¥ÁØ(FHS:File system Hierarchy Standard) ¶ÇÇÑ ¼Ò ½º¹èÆ÷½Ã¿¡ ¾î¶² À§Ä¡¿¡ ¹«¾ùÀ» µÎ¾î¾ß ÇÏ´ÂÁö¿¡ ´ëÇØ ³íÇÏ°í ÀÖ´Ù.( www.pathname.com/fhs ¸¦ ÂüÁ¶Çϱ⠹ٶ÷). FHS¿¡¼´Â ´ëºÎºÐÀÇ ¶óÀ̺귯¸®¸¦ /usr/lib¿¡ ¼³Ä¡ÇÒ °ÍÀ» ±ÇÀåÇÑ´Ù, ±×·¯³ª ½Ã½ºÅÛ ½ÃÀ۽à ÇÊ¿äÇÑ ¶óÀ̺귯¸®´Â /lib¿¡ ¶ÇÇÑ, ºñ½Ã½ºÅÛ ¶óÀ̺귯¸®´Â /usr/local/lib¿¡ ¼³Ä¡µÇ¾î¾ß ÇÑ´Ù.
À§ÀÇ µÎ Ç¥ÁØÀÌ ¼·Î ¸ð¼øµÇ´Â µí º¸ÀÌÁö¸¸ ½ÇÁ¦·Î ±×·¸Áö´Â ¾Ê´Ù. GNUÀÇ Ç¥ÁØÀº ¼Ò½ºÄÚµåÀÇ °³¹ßÀÚ¸¦ À§ÇÑ µðÆúÆ®°ªÀ» Á¦¾ÈÇÏ´Â °ÍÀÌ°í, FHS´Â ¼Ò½º ÀÇ ¹èÆ÷ÀÚ(½Ã½ºÅÛÀÇ µðÆúÆ® ¼Ò½ºÄڵ带 ¼±ÅÃÀûÀ¸·Î ±× ½Ã½ºÅÛÀÇ ÆÐÅ°Áö °ü¸® µµ±¸¸¦ ÅëÇؼ ´ëÄ¡½ÃÅ°´Â)¸¦ À§ÇÑ µðÆúÆ®°ªÀ» Á¦¾ÈÇÏ´Â °ÍÀÌ´Ù. ½ÇÁ¦·Î ÀÌ°Í Àº »ó´çÈ÷ È¿°úÀûÀÎ °ÍÀÌ´Ù, Áï, ´ç½ÅÀÌ ´Ù¿î·ÎµåÇÑ °¡Àå ÃÖ½ÅÀÇ(¹ö±×ÀÇ °¡´É ¼ºÀÌ ÀÖ´Â) ¼Ò½ºÄÚµå´Â ÀÚµ¿ÀûÀ¸·Î ·ÎÄà µð·ºÅ丮ÀÎ /usr/local¿¡ ¼³Ä¡µÉ°ÍÀÌ¸ç ±× Äڵ尡 ÀÌÁ¦ ¿Ïº®ÇØÁö¸é ÆÐÅ°Áö ¸Å´ÏÀú¸¦ ÀÌ¿ëÇÏ¿© ½Ã½ºÅÛ¿¡ ¼³Ä¡µÈ µð ÆúÆ®(¶óÀ̺귯¸®)¸¦ ´ëÄ¡ÇÏ°í ¹èÆ÷½ÃÀÇ Ç¥ÁØ µð·ºÅ丮·Î ¼³Ä¡ÇÒ¼ö ÀÖ´Â °ÍÀÌ ´Ù. ¶óÀ̺귯¸®¸¦ ÅëÇؼ¸¸ È£Ãâ°¡´ÉÇÑ ÇÁ·Î±×·¥µéÀ» ¶óÀ̺귯¸®°¡ È£ÃâÇÏ´Â °æ¿ì¿¡´Â ¹Ýµå½Ã ±× ÇÁ·Î±×·¥µéÀ» usr/local/libexec(¹èÆ÷º»¿¡¼´Â /usr/libexec ÀÓ)¿¡ µÎ¾î¾ßÇÔÀ» ¸í½ÉÇ϶ó. ÇÑ°¡Áö È¥µ¿Àº ·¹µåÇÞÀÇ ¹èÆ÷º»µéÀº ¶óÀ̺귯¸®¸¦ ã´Â °úÁ¤¿¡¼ /usr/local µð·ºÅ丮¸¦ Á¦¿Ü ½ÃŲ´Ù´Â °ÍÀε¥, ¾Æ·¡¿¡¼ ³íÀÇ µÉ /etc/so.confºÎºÐÀ» Âü°íÇÏ±æ ¹Ù¶õ´Ù. ±×¿Ü¿¡ ¶Ç´Ù¸¥ ÇϳªÀÇ Ç¥ÁØ ¶óÀÌºê ·¯¸® µð·ºÅ丮°¡ Àִµ¥ X-À©µµ¿ì ½Ã½ºÅÛÀÌ »ç¿ëÇÏ´Â /usr/X11R6/libÀÌ ±× °ÍÀÌ´Ù. /lib/security µð·ºÅ丮´Â PAM¸ðµâ¿¡¼ »ç¿ëµÊ¿¡ À¯ÀÇÇ϶ó. ÀÌ µð·º Å丮´Â Åë»ó µ¿Àû ¶óÀ̺귯¸®·Î½á ÀûÀçµÈ´Ù.(¿ª½Ã µÞºÎºÐ¿¡¼ ³íÀǵɰÍÀÓ)
¸ðµç ¸®´ª½º ½Ã½ºÅÛÀÌ Æ÷ÇԵǴ GNUÀÇ glibc-±â¹ÝÀÇ ½Ã½ºÅÛÀº ELF ÀÌÁø ½Ç Çà ÇÁ·Î±×·¥ÀÇ ½ÃÀ۽ÿ¡ ÀÚµ¿ÀûÀ¸·Î ÇÁ·Î±×·¥ ·Î´õ¸¦ ÀûÀçÇÏ°í ½ÇÇà½ÃŲ´Ù. ¸®´ª½º ½Ã½ºÅÛ¿¡¼ ÀÌ ·Î´õ´Â /lib/ld-linux.so.X(X´Â ¹öÀü ³Ñ¹öÀÓ)À̶ó ºÒ¸®¿ö Áö¸ç ÇÁ·Î±×·¥¿¡¼ »ç¿ëµÇ´Â ¸ðµç °øÀ¯ ¶óÀ̺귯¸®¸¦ Â÷·Ê´ë·Î ã¾Æ¼ ÀûÀç½Ã Ų´Ù.
Ž»öµÇ¾îÁú µð·ºÅ丮ÀÇ ¸ñÂ÷´Â /etc/ld.so.conf¿¡ µé¾î ÀÖ´Ù. ·¹µåÇÞ¿¡ ±â¹ÝÇÑ ¹èÆ÷º»¿¡´Â ÀϹÝÀûÀ¸·Î /usr/local/lib°¡ /etc/ld.so.confÆÄÀÏ¿¡ µé¾î ÀÖÁö¾ÊÀºµ¥ ÀúÀÚ°¡ »ý°¢Çϱâ·Î ÀÌ°ÍÀº ÀÏÁ¾ÀÇ ¹ö±×°¡ ¾Æ´Ñ°¡ »ý°¢ÇÑ´Ù. ·¹µåÇÞÀÇ °æ¿ì /usr/local/libÀ» /etc/ld.so.conf¿¡ ÷°¡ÇÏ´Â °ÍÀº ¸¹Àº ÇÁ·Î±×·¥µéÀ» ¼öÇà½ÃÅ° ±âÀ§ÇØ ÈçÈ÷ ÀÖ´Â ¼öÁ¤ÀÛ¾÷ÀÌ´Ù.
¸¸¾à ¶óÀ̺귯¸®³»ÀÇ Æ¯Á¤ÇÑ ÇÔ¼ö¸¸À» ´ëÄ¡½ÃÅ°°í ³ª¸ÓÁö´Â ±×´ë·Î À¯ÁöÇÏ·Á ÇÒ¶§´Â ´ëÄ¡½Ãų ¶óÀ̺귯¸®(.oÆÄÀϵé)µéÀ» /etc/ld.so.preload ÆÄÀÏ¿¡ ¸í½ÃÇÏ¸é µÇ´Âµ¥ ÀÌ·¯ÇÑ ÇÁ¸®·Îµå ¶óÀ̺귯¸®µéÀº Ç¥ÁØÀûÀÎ ÇÔ¼öº¸´Ù ¿ì¼±±ÇÀ» °¡Áö°Ô µÈ´Ù. ÀÌ·¯ÇÑ ÇÁ¸®·Îµù ÆÄÀϵéÀº º¸Åë ÀÀ±Þ ÆÐÄ¡º»¿¡¼ »ç¿ëµÇ´Âµ¥ Á¤»óÀû ¹èÆ÷º»¿¡´Â Àß Æ÷ÇÔµÇÁö ¾Ê´Â´Ù.
¸Å ÇÁ·Î±×·¥ÀÇ ½ÃÀ۽ø¶´Ù ÀÌ ¸ðµç µð·ºÅ丮µéÀ» Ž»öÇÏ´Â °ÍÀº Àü¹ÝÀûÀ¸·Î ¸Å¿ì ºñÈ¿À²ÀûÀ̱⠶§¹®¿¡ ½ÇÁ¦ÀûÀ¸·Î´Â ij½¬°¡ »ç¿ëµÈ´Ù. ldconfig ÇÁ·Î ±×·¥Àº Åë»ó /etc/ld.so.conf¸¦ ÀÐ¾î¼ ¸ðµç ÇÊ¿äÇÑ µ¿Àû ¸µÅ© µð·ºÅ丮µé·ÎºÎ ÅÍ Àû´çÇÑ ½Éº¼¸¯ ¸µÅ©¸¦ »ý¼ºÇÑ´Ù.(±×·¡¼ À̸§ »ç¿ëÀÇ ±ÔÄ¢À» Àß µû¶ó¾ß ÇÑ´Ù) ±× ´ÙÀ½À¸·Î /etc/ld.so.cache ¿¡ ÀÌ ³»¿ëµéÀ» ±â·ÏÇϸç ÀÌ ´ÙÀ½ ºÎÅÍ ´Â ÇÁ·Î±×·¥µéÀÌ ÀÌ ÆÄÀÏÀ» ÀÌ¿ëÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô Çؼ ¶óÀ̺귯¸®ÀÇ ¾×¼¼ ½º ¼Óµµ´Â »ó´çÈ÷ Çâ»óµÇ´Â °ÍÀÌ´Ù. À§ÀÇ ³»¿ëÀÌ ÇÔÃàÇÏ´Â ¹Ù´Â DLLÀÌ Ãß°¡ ¶Ç´Â Á¦°ÅµÉ ¶§, ¶Ç´Â DLLÀÇ µð·ºÅ丮°¡ º¯°æµÉ¶§´Â ¹Ýµå½Ã ldconfig°¡ ½ÇÇàµÇ¾î¾ß ÇÑ´Ù´Â °ÍÀ̸ç, ±×·¡¼ ÆÐÅ°Áö ¸Å´ÏÀú°¡ ¶óÀ̺귯¸®¸¦ ¼³Ä¡ÇÒ ¶§, ÀÌ °úÁ¤Àº Åë»óÀ¸·Î ¼öÇàµÇ´Â ÀýÂ÷ÀÎ °ÍÀÌ´Ù. ±×·¡¼ ÇÁ·Î±×·¥ ½Ã À۽à µ¿Àû ·Î´õ´Â ½ÇÁ¦·Î´Â /etc/ld.so.cache¸¦ »ç¿ëÇÏ¿© ÇÊ¿äÇÑ ¶óÀ̺귯¸®¸¦ ÀûÀçÇÏ´Â °ÍÀÌ´Ù.
¿©·¯ Á¾·ùÀÇ È¯°æº¯¼öµéÀÌ À§ÀÇ ÀÌ·¯ÇÑ ÇÁ·Î±×·¥ ½ÃÀÛ½ÃÀÇ ÀûÀç°úÁ¤µéÀ» Á¶ ÀýÇÒ¼ö ÀÖÀ¸¸ç ¶ÇÇÑ ÀÌ °úÁ¤µéÀ» ´ëÄ¡Çϵµ·Ï Çϴ ȯ°æº¯¼öµéµµ ÀÖ´Ù. ¿¹¸¦ µé ¸é ÀÌ ¼öÇà°úÁ¤Áß, ¾î¶² ¶óÀ̺귯¸®¸¦ ÀáÁ¤ÀûÀ¸·Î ±³Ã¼ÇÏ¿© ¼öÇàÇÒ¼öµµ ÀÖ´Ù. ¸®´ª½º¿¡¼ ȯ°æº¯¼ö LD_LIBRARY_PATH´Â ÄÝ·ÐÀ¸·Î ºÐ¸®µÇ¾î Àִ ǥÁØ ÀûÀÎ ¶óÀ̺귯¸®¼Â¿¡ ¾Õ¼¼ °¡Àå ¸ÕÀú Ž»öµÇ¾îÁú ¶óÀ̺귯¸® µð·ºÅ丮ÁýÇÕ ÀÌ´Ù. ÀÌ·¸°Ô ÇÏ¸é »õ·Î¿î ¶óÀ̺귯¸®¸¦ µð¹ö±ëÇϰųª ºñÇ¥ÁØÀûÀÎ ¶óÀ̺귯¸® ¸¦ ¾î¶² Ư¼öÇÑ ¿ëµµ·Î »ç¿ëÇÒ ¶§¿¡ À¯¿ëÇÒ°ÍÀÌ´Ù. ȯ°æº¯¼ö LD_PRELOAD ´Â /etc/ld.so. preloadó·³ Ç¥ÁØÀûÀÎ ÇÔ¼öµé¿¡ ¿À¹ö¶óÀ̵åµÉ ÇÔ¼öµéÀÌ ÀÖ´Â ¿À ºêÁ§Æ® ÆÄÀÏÀÇ ¸®½ºÆ®¸¦ ³ªÅ¸³½´Ù. À§ÀÇ ÀÌ·¯ÇÑ ±â´ÉµéÀº ·Î´õ /lib/ld-linux.so °¡ ±¸ÇöÇÑ´Ù.
ÀûÀç°úÁ¤À» Á¦¾îÇÏ´Â ´Ù¸¥ Á¾·ùÀÇ È¯°æº¯¼öµéÀÌ ÀÖ´Ù; À̸§ÀÌ LD_ ¶Ç´Â RTLD_·Î ½ÃÀÛÇÑ´Ù. ÀÌ·¯ÇÑ º¯¼öµéÀÇ ´ëºÎºÐÀº ÀûÀç°úÁ¤ÀÇ Àú¼öÁØ µð¹ö±ëÀ̳ª Ư¼ö±â´ÉÀÇ ±¸ÇöÀ» À§Çؼ »ç¿ëµÇ¾î Áø´Ù. ÀÌµé ´ëºÎºÐÀÌ Àß ¹®¼ÈµÇÁö ¾Ê¾Ò ±â ¶§¹®¿¡ ÀÚ¼¼È÷ ¾Ë·Á¸é ¼Ò½ºÄڵ带 Àо°¡´Â °ÍÀÌ ÃÖ¼±ÀÇ ¹æµµÀÏ °ÍÀÌ´Ù. ÀÌ·¸°Ô µ¿Àû¸µÅ© ¶óÀ̺귯¸®¿¡ ´ëÇÑ Á¦¾î±ÇÀ» »ç¿ëÀÚ¿¡°Ô Çã¶ôÇÏ´Â °ÍÀº Ư º°ÇÑ Á¶Ä¡°¡ ÃëÇØÁöÁö ¾Ê´Â´Ù¸é setuid/setgid µîÀÇ ÇÁ·Î±×·¥¿¡ À־ ´ë´Ü È÷ À§ÇèÇÑ °ÍÀÌ´Ù. ±×·¡¼ GNU·Î´õÀÇ °æ¿ì ¸¸¾à¿¡ ÇÁ·Î±×·¥ÀÌ setuid ¶Ç´Â setgidÀÏ °æ¿ì¿¡´Â ÀÌ·¯ÇÑ È¯°æº¯¼öµé(¶Ç´Â ÀÌ¿Í À¯»çÇÑ ´Ù¸¥ º¯¼öµé)Àº ¹«½Ã µÇ°Å³ª ¾Æ´Ï¸é ÇÒ¼öÀÖ´Â ±â´ÉÀÌ ´ë´ÜÈ÷ Á¦ÇѵȴÙ. ·Î´õ´Â ÇÁ·Î±×·¥ÀÌ setuid ¶Ç´Â setgidÀÎÁö Á¡°ËÇϱâÀ§ÇØ ÇÁ·Î±×·¥ÀÇ credential¸¦ üũÇÑ´Ù; uid¿Í euid(effective user ID)°¡ ´Ù¸£°Å³ª gid¿Í egid(effective group ID)°¡ ´Ù¸¥°æ ¿ì¿¡ ·Î´õ´Â ÀÌ ÇÁ·Î±×·¥À» setuid/setgid(¶Ç´Â »ó¼Ó¹ÞÀº°Í)ÀÌ¶ó °¡Á¤ÇÏ°í ¸µ Å©°úÁ¤ÀÇ Á¦¾î±â´ÉÀ» ´ë´ÜÈ÷ Á¦ÇÑÇÏ°Ô µÈ´Ù. GNUÀÇ glibc¶óÀ̺귯¸®ÀÇ ¼Ò½ºÄÚ µå¸¦ Àо¸é ÀÌ·¯ÇÑ ³»¿ëÀ» Àß º¼¼ö ÀÖÀ»°ÍÀ̸ç ƯÈ÷ elf/rtld.c, sysdeps/ generic/dl-sysdep.c¸¦ º¸±æ ¹Ù¶õ´Ù. ÀÌ°ÍÀÌ ¶æÇÏ´Â ¹Ù´Â ¸¸¾à¿¡ ´ç½ÅÀÌ uid, gid¸¦ euid, egid¿Í °°°ÔÇÏ°í ÇÁ·Î±×·¥À» È£ÃâÇϸé ÀÌ·¯ÇÑ È¯°æº¯¼öµéÀº ¿ÏÀü ÇÑ ¿µÇâ·ÂÀ» ¹ÌÄ¥¼ö ÀÖ´Ù´Â ¶æÀÌ´Ù. ´Ù¸¥ À¯´Ð½º À¯»ç ½Ã½ºÅ۵鿡¼´Â ÀÌ·¯ÇÑ »óȲÀ» ´Ù¸£°Ô ´Ù·ç±âµµ ÇÏÁö¸¸ °°Àº ÀÌÀ¯·Î ÀÎÇؼ setuid/setgid ÇÁ·Î±×·¥ Àº ȯ°æº¯¼ö¿¡ ÀÇÇؼ À߸øµÈ ¿µÇâÀ» ¹Þ¾Æ¼´Â ¾ÊµÇ´Â °ÍÀÌ´Ù.
°øÀ¯ ¶óÀ̺귯¸®ÀÇ »ý¼ºÀº ½±´Ù. ¸ÕÀú gccÀÇ fPICÇ÷¡±×("position inde- pendent code" °øÀ¯¶óÀ̺귯¸®·Î »ç¿ëÇÒ ¶§ Çʼö)¸¦ »ç¿ëÇÏ¿© ¿ÀºêÁ§Æ® ÆÄÀÏ À» »ý¼ºÇÑ´Ù. ±× ´ÙÀ½¿£ ´ÙÀ½°ú °°Àº ¸í·ÉÇüÅ·Π°øÀ¯ ¶óÀ̺귯¸®¸¦ »ý¼ºÇÑ´Ù.
gcc -shared -WI, -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À̶§ ÁÖÀÇ»çÇ× ¸î°¡Áö¸¦ Àû¾îº¸¸ç ¾Æ·¡¿Í °°´Ù.
* ÄÄÆÄÀÏ °á°ú »ý¼ºµÉ ¶óÀ̺귯¸®¸¦ ¸í±âÇÏ´Â °ÍÀ» ÀØÁö ¸»°ÍÀ̸ç -fomit, -frame, -pointer µîÀÇ ÄÄÆÄÀÏ·¯ ¿É¼ÇÀº ÁøÂ¥ ÇÊ¿äÇÒ °æ¿ì¿Ü¿£ ¾²Áö ¸» °Í. °á°úÀûÀ¸·Î »ý¼ºµÈ ¶óÀ̺귯¸®´Â µ¿ÀÛÇÏÁö¸¸ ÀÌ·¸°Ô ÇÏ¸é µð¹ö°Å´Â ¹«¿ëÁö¹° ÀÌ µÈ´Ù.
* -fpic°¡ ¾Æ´Ñ -fPIC¸¦ »ç¿ëÇÏ¿© ÄÚµå·Ñ »ý¼º½ÃÄÑ¾ß ÇÑ´Ù.(-fpic¸¦ ¾µ °æ¿ì ºÐ ±âÁ¡¿¡¼ Å« À§Ä¡º¯È°¡ ÇÊ¿äÇÒ°æ¿ì ¿ÏÀüÇÑ À§Ä¡ µ¶¸³Çü Äڵ带 ¾òÀ»¼ö ¾ø´Ù.)
ÀÌÁ¦ ¸¸¾à¿¡ ´ç½ÅÀÌ ÇϳªÀÇ °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µé¾ú´Ù¸é ±× ´ÙÀ½À¸·Î ¼³Ä¡ ¸¦ ¿øÇÒ °ÍÀÌ´Ù. °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ¸¸µé¾îÁø °øÀ¯ ¶óÀ̺귯¸®¸¦ Ç¥ÁØ µð·ºÅä ¸®µéÁßÀÇ Çϳª(¿¹¸¦ µé¸é /usr/lib)¿¡ º¹»çÇÏ°í ldconfig(8)¸¦ ½ÇÇà½ÃÅ°´Â °ÍÀÌ ´Ù.
¸¸¾à¿¡ (/usr/lib µð·ºÅ丮ÀÇ º¯°æ±ÇÀ» °¡ÁöÁö ¸øÇϰųª Çؼ) À§Ã³·³ ÇÒ¼ö ¾ø ´Â °æ¿ì°¡ ÀÖ´Ù¸é ȯ°æº¯¼ö¸¦ »ç¿ëÇÏ¿© Á¶Á¤ÇÒ¼ö ÀÖ´Ù. ¸ÕÀú ¾îµò°¡¿¡ °øÀ¯ ¶ó À̺귯¸®¸¦ »ý¼ºÇؾßÇÑ´Ù. ±× ´ÙÀ½¿¡ ÇÊ¿äÇÑ °ÍÀº real name¿¡ °üÇÑ ½Éº¼¸¯ ¸µÅ©·Î½á sonameÀ» »ý¼º(¶Ç´Â ¹öÀü¸íÀ» ÀüÇô ¸í½ÃÇÏÁö ¾Ê´Â »ç¿ëÀÚÀ» À§ÇÑ ¹öÀü¸íÀÌ Æ÷ÇÔµÇÁö ¾ÊÀº sonameÀ» ½Éº¼¸¯ ¸µÅ©·Î »ý¼º)ÇÏ´Â °ÍÀε¥ À̸¦ À§ ÇÑ °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ ldconfig¸¦ ½ÇÇàÇÏ´Â °ÍÀÌ´Ù.
ldconfig -n directory_with_shared_library
±× ´ÙÀ½À¸·Î Ç¥ÁØ ¶óÀ̺귯¸® º¸´Ù ¾Õ¼¼ Ž»öµÉ ¶óÀ̺귯¸® µð·ºÅ丮 ¸ñ·Ï ÀÎ LD_LIBRARY_PATH º¯¼ö¸¦ ¼³Á¤ÇÑ´Ù. ¸¸¾à¿¡ bash¶ó¸é ´ÙÀ½°ú °°ÀÌ ÇÏ ¿© my_programÀ» Æ÷ÇÔµÇ°Ô ÇÒ¼ö ÀÖ´Ù.
LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH my_program
¸¸¾à ƯÁ¤ÇÑ ÇÔ¼ö¸¸À» ¿À¹ö¶óÀ̵å ÇÏ·Á¸é ¿À¹ö¶óÀ̵ù ¿ÀºêÁ§Æ® ÆÄÀÏÀ» »ý¼º ÇÑ µÚ¿¡ LD_PRELOAD¸¦ ¼³Á¤Çؼ ÇÒ¼ö ÀÖ´Ù. Áï, ÀÌ ÆÄÀÏ¿¡ ÀÖ´Â ÇÔ¼öµéÀÌ ±âÁ¸ ÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵åÇÑ´Ù.
ÀϹÝÀûÀ¸·Î ¶óÀ̺귯¸®¸¦ °»½ÅÇϴµ¥ ÀÖ¾î Ưº°ÇÑ °í·Á»çÇ×Àº ¾ø´Ù. ¸¸¾à API°¡ º¯ÈÇÑ´Ù¸é ¶óÀ̺귯¸®ÀÇ Á¦ÀÛÀÚ´Â sonameÀ» º¯°æÇÒ °ÍÀÌ´Ù. °°Àº sonameÀ» °¡Áö¸é¼ ³»¿ëÀº °»½ÅµÈ ½Å¹öÀüÀÇ ¶óÀ̺귯¸®¸¦ ¹«½ÃÇÏ°í ±¸¹öÀüÀÇ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ·Á¸é, ±¸¹öÀüÀÇ ¶óÀ̺귯¸®¸¦ ¾îµò°¡¿¡ º¹»çÇÏ°í ±×°ÍÀÇ À̸§À» º¯°æ(À̸¦Å×¸é ¿¾³¯À̸§.origµî)ÇÑ µÚ ÀÌ À̸§ º¯°æµÈ ¶óÀ̺귯¸®¸¦ ½Ç Á¦·Î È£ÃâÇÏ¿© »ç¿ëÇϵµ·Ï Àç¼³Á¤ÇÏ´Â ÀÛÀº wrap½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÏ¿© °Á¦Àû À¸·Î ±¸¹öÀüÀ» »ç¿ëÇÏ°Ô ÇÒ¼öÀÖ´Ù. °ü·Ê»ó ¿©·¯¹öÀüÀÇ ¶óÀ̺귯¸®µéÀÌ °°Àº µð ·ºÅ丮¿¡ ÀÖÀ»¼ö ÀÖÁö¸¸ ÀÌ ±¸¹öÀüÀÇ ¶óÀ̺귯¸®¸¦ µû·Î ƯÁ¤ÇÑ µð·ºÅ丮¿¡ À§Ä¡½Ãų¼öµµ ÀÖ´Ù. wrap ½ºÅ©¤©Æ®´Â ¾Æ¸¶ ¾Æ·¡¿Í °°À» °ÍÀÌ´Ù.
#!/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
º¸Åë ÇÁ·Î±×·¥¿¡¼ ÀÇÁ¸ÇÏ°í ÀÖ´Â ¶óÀ̺귯¸®ÀÇ sonameÀÇ ¸ñ·Ï°ú Æ÷ÇÔµÈ µð ·ºÅ丮°¡ º¸ÀÏ°ÍÀÌ´Ù. ½ÇÁúÀûÀ¸·Î ´ÙÀ½ÀÇ µÎ ¸ðµâÀÇÁ¸¼ºÀº Ç×»ó º¸ÀÏ°ÍÀε¥ ±× °ÍÀº ¾Æ·¡¿Í °°´Ù.
* /lib/ld-linux.so.N(NÀº 1ÀÌ»ó Àû¾îµµ 2). ÀÌ ¶óÀ̺귯¸®´Â ´Ù¸¥ ¸ðµç ¶óÀÌºê ·¯¸®¸¦ ÀûÀçÇÑ´Ù.
* libc.so.N(NÀº 6¶Ç´Â ±×ÀÌ»ó). ÀÌ°ÍÀº C ¶óÀ̺귯¸®ÀÌ´Ù. ´Ù¸¥ ÇÁ·Î±×·¡¹Ö ¾ð¾îµé¿¡¼µµ(Àû¾îµµ ±× ¾ð¾îÀÇ ¶óÀ̺귯¸®¸¦ ±¸ÇöÇϱâÀ§Çؼ) C ¶óÀ̺귯¸® ¸¦ ¾²´Â °æÇâÀÌ ÀÖ´Ù. ±×·¡¼ ¸ðµç ÇÁ·Î±×·¥¿¡¼ Àû¾îµµ ÀÌ ¶óÀ̺귯¸®´Â Æ÷ Ç﵃ °ÍÀÌ´Ù.
°æ°í: ldd¸¦ ½Å·ÚÇÒ¼ö ¾ø´Â ÇÁ·Î±×·¥¿¡ »ç¿ëÇÏ¿©¼´Â ¾ÊµÈ´Ù. ÀÌ´Â lddÀÇ ¸Å´º ¾ó¿¡µµ ¸í¹éÈ÷ ¾ð±ÞµÈ ¾ê±âÀÌ´Ù. ldd´Â Á÷Á¢ ±× ÇÁ·Î±×·¥À» È£ÃâÇÔÀ¸·Î½á ¼öÇà µÇ±â ¶§¹®¿¡ ¿¹±âÄ¡ ¸øÇÑ ÄÚµåÀÇ ½ÇÇàÀ» °¡Á®¿Ã¼ö Àֱ⠶§¹®ÀÌ´Ù.
»õ·Î¿î ¹öÀüÀÇ ¶óÀ̺귯¸®°¡ ±¸¹öÀüÀÇ ¶óÀ̺귯¸®¿Í ÀÌÁøÄÚµå Â÷¿ø¿¡¼ ȣȯ µÇÁö ¾Ê´Â´Ù¸é sonameÀº º¯°æµÉ ÇÊ¿ä°¡ ÀÖ´Ù. ÀÌÁøÄڵ忡¼ ºñȣȯµÇ´Â °æ ¿ì¿¡´Â ´ÙÀ½ÀÇ ³×°¡Áö ÀÌÀ¯°¡ °¡Àå ±âº»ÀûÀÌ´Ù.