8. µ¿Àû ¸µÅ·: °øÀ¯ ¶óÀ̺귯¸®

À§ÀÇ Á¤Àû ¶óÀ̺귯¸®´Â ¸î°¡Áö Áß¿äÇÑ ´ÜÁ¡µéÀ» Áö´Ï°í ÀÖ´Ù; ¿¹·Î, printf³ª scanf¿Í °°Àº ÇÔ¼öµéÀ» °í·ÁÇØº¸ÀÚ. ÀÌ·¯ÇÑ ÇÔ¼öµéÀº °ÅÀÇ ¸ðµç ÀÀ¿ë ÇÁ·Î±×·¥¿¡¼­ »ç¿ëµÈ´Ù. ¸¸¾à ½Ã½ºÅÛÀÌ 50~100°³ÀÇ ÇÁ·Î¼¼½º¸¦ µ¿ÀÛ½Ã۰í ÀÖ´Ù¸é, °¢ ÇÁ·Î¼¼½º´Â °¢°¢ printf¿Í scanfÀÇ ½ÇÇà °¡´ÉÇÑ ÄÚµåÀÇ º¹»çº»À» °¡Áö°í µ¿ÀÛÇÏ°Ô µÈ´Ù. À̰ÍÀº ¸Þ¸ð¸® °ø°£ÀÇ Áß´ëÇÑ ³¶ºñ¸¦ ÃÊ·¡ÇÑ´Ù. °øÀ¯ ¶óÀ̺귯¸®´Â ÀÌ·¯ÇÑ Á¤Àû ¶óÀ̺귯¸®ÀÇ ´ÜÁ¡À» ÇØ°áÇÑ´Ù. °øÀ¯ ¶óÀ̺귯¸®´Â ·±-ŸÀÓ¶§ ¸Þ¸ð¸®ÀÇ ÀÓÀÇÀÇ À§Ä¡·Î ·ÎµåµÉ ¼ö ÀÖ´Â ¿ÀºêÁ§Æ® ¸ðµâÀÌ´Ù. ±×¸®°í ±×°ÍÀº ¸Þ¸ð¸®¿¡¼­ ÇÁ·Î±×·¥°ú ¸µÅ·µÉ ¼ö ÀÖ´Ù. °øÀ¯ ¶óÀ̺귯¸®´Â Á¾Á¾ °øÀ¯ ¿ÀºêÁ§Æ®¶ó°íµµ ºÒ¸®¿î´Ù. ´ëºÎºÐÀÇ À¯´Ð½º ½Ã½ºÅÛ¿¡¼­´Â .so·Î °øÀ¯ ¶óÀ̺귯¸® ÆÄÀϸíÀÌ ³¡³ª¸ç; HP-UX¿¡¼­´Â .sl·Î ³¡³ª°í ¸¶ÀÌÅ©·Î ¼ÒÇÁÆ®»ç´Â DLL(dynamic link libraries)·Î ºÎ¸¥´Ù.

°øÀ¯ ¿ÀºêÁ§Æ®¸¦ ¸¸µé±â À§ÇØ, ÄÄÆÄÀÏ·¯´Â ´ÙÀ½°ú °°Àº ¿É¼ÇÀ» °¡Áö°í È£ÃâµÈ´Ù.

gcc -shared -fPIC -o libfoo.so a.o b.o

À§ÀÇ ¸í·É¾î´Â ÄÄÆÄÀÏ·¯°¡ a.o, b.o¶ó´Â µÎ °³ÀÇ ¿ÀºêÁ§Æ® ¸ðµâµé·ÎºÎÅÍ libfoo.so¶ó´Â °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µéµµ·Ï ÇÑ´Ù. -fPIC ¿É¼ÇÀº ÄÄÆÄÀÏ·¯¿¡°Ô À§Ä¡ µ¶¸³ÀûÀÎ ÄÚµå(position independent code)¸¦ ¸¸µéµµ·Ï ÇÑ´Ù.

¸¸¾à bar.o¶ó´Â ¿ÀºêÁ§Æ® ¸ðµâÀÌ a.o, b.o¿Í ÀÇÁ¸¼ºÀÌ Á¸ÀçÇÑ´Ù°í °¡Á¤Çϸé, ¸µÄ¿´Â ´ÙÀ½Ã³·³ ºÒ¸®¿öÁø´Ù.

gcc bar.o ./libfoo.so

ÀÌ ¸í·É¾î´Â ·Îµå-ŸÀÓ¶§ ¸µÅ©µÉ ¼ö ÀÖ´Â a.outÀ̶ó´Â ½ÇÇàÆÄÀÏÀ» ¸¸µç´Ù. ¿©±â¼­ a.outÀº Á¤Àû ¶óÀ̺귯¸®¸¦ »ç¿ëÇÒ ¶§´Â Æ÷ÇԵǾú´ø a.o¿Í b.o ¿ÀºêÁ§Æ® ¸ðµâÀ» Æ÷ÇÔÇϰí ÀÖÁö ¾Ê´Ù. ÀÌ ½ÇÇàÆÄÀÏÀº ·±-ŸÀÓ¶§ libfoo.so¿Í ÇÔ²² ÇØ¼®µÉ ¼ö ÀÖ´Â Àç¹èÄ¡¿Í ½Éº¼ Å×ÀÌºí¸¸À» Æ÷ÇÔÇϰí ÀÖ´Ù. µû¶ó¼­, a.outÀº libfoo.so¿ÍÀÇ ÀÇÁ¸¼ºÀÌ Á¸ÀçÇÏ´Â ºÎºÐÀûÀ¸·Î ½ÇÇà°¡´ÉÇÑ ÆÄÀÏ(partially executable file)ÀÌ´Ù. ÀÌ ½ÇÇà°¡´ÉÇÑ ÆÄÀÏÀº .interp¶ó´Â ¼½¼ÇÀ» °¡Áö°í Àִµ¥, ÀÌ ¼½¼ÇÀº µ¿Àû¸µÄ¿(dynamic linker)ÀÇ À̸§À» °¡¸®Å°°í ÀÖ´Ù. µ¿Àû¸µÄ¿ ÀÚüµµ ¸®´ª½º¿¡¼­´Â ld-linux.so¶ó´Â °øÀ¯ ¿ÀºêÁ§Æ®ÀÌ´Ù. ±×·¡¼­ ½ÇÇàÆÄÀÏÀÌ ¸Þ¸ð¸®·Î ÀûÀçµÉ ¶§, ·Î´õ´Â Á¦¾î±ÇÀ» µ¿Àû¸µÄ¿·Î ³Ñ±ä´Ù. µ¿Àû¸µÄ¿´Â °øÀ¯ ¶óÀ̺귯¸®µé°ú ÇØ´ç ÇÁ·Î±×·¥ÀÇ ÁÖ¼Ò°ø°£À» ¸ÅÇνÃų ¼ö ÀÖ´Â start-up Äڵ带 °¡Áö°í ÀÖ°í ´ÙÀ½°ú °°ÀÌ µ¿ÀÛÇÑ´Ù.

¸¶Áö¸·À¸·Î, µ¿Àû¸µÄ¿´Â Á¦¾î±ÇÀ» ÀÀ¿ëÇÁ·Î±×·¥À¸·Î ³Ñ±ä´Ù. À̶§ºÎÅÍ °øÀ¯ ¿ÀºêÁ§Æ®´Â ¸Þ¸ð¸®¿¡ °íÁ¤µÇ°Ô µÈ´Ù.