´ÙÀ½ ÀÌÀü Â÷·Ê

6. ¸µÅ©

ȣȯµÇÁö ¾Ê´Â µÎ °³ÀÇ ¹ÙÀ̳ʸ® Çü½Ä, Á¤Àû ¶óÀ̺귯¸®¿Í µ¿Àû ¶óÀ̺귯¸®ÀÇ ±¸ºÐ, ÄÄÆÄÀÏ °úÁ¤ ÈÄ¿¡ ÀϾ´Â ÀÛ¾÷°ú ÀÌ¹Ì ÄÄÆÄÀÏÀ» ¸¶Ä£ ½ÇÇà ÇÁ·Î±×·¥ÀÌ ½ÇÇàµÉ ¶§ ÀϾ´Â ÀÛ¾÷ µÑ ´Ù¿¡ ´ëÇÏ¿© "¸µÅ©"¶ó´Â °°Àº ¸»À» »ç¿ëÇÏ¿© »ý±â´Â È¥¶õÇÔ(»ç½ÇÀº ·Îµå(load)ÇÑ´Ù¶ó´Â ¸»¿¡ ´ëÇÑ °úºÎÇ϶ó°í ¸»ÇÒ ¼öµµ ÀÖ´Ù), ÀÌ·± ¸ðµç °Í¿¡ ´ëÇÏ¿© ´Ù·ç¹Ç·Î À̹ø ¼½¼ÇÀº Á» º¹ÀâÇÒ °ÍÀÌ´Ù. ¸»¸¸ ¾î·Á¿ï »ÓÀ̹ǷΠũ°Ô °ÆÁ¤ÇÒ ÇÊ¿ä´Â ¾ø´Ù.

ÀÌ·¯ÇÑ È¥¶õÀ» ¿ÏÈ­Çϱâ À§Çؼ­, ¿ì¸®´Â ½ÇÇà½Ã(runtime)¿¡ ÀϾ´Â ÀÏ¿¡ ´ëÇÏ¿© µ¿Àû ·Îµù(Dynamic Loading)À̶ó´Â ´Ü¾î¸¦ »ç¿ëÇÏ°Ú´Ù. ±×¸®°í ´ÙÀ½ ¼½¼Ç¿¡ °¡¼­ ´Ù·ç°íÀÚ ÇÑ´Ù. ¶Ç´Â µ¿Àû ¸µÅ·(Dynamic Linking)À̶ó´Â ´Ü¾î·Î Ç¥ÇöµÇ±âµµ ÇÑ´Ù. À̹ø ¼½¼Ç¿¡¼­´Â ¿À·ÎÁö ÄÄÆÄÀÏ °úÁ¤ ¹Ù·Î Á÷ÈÄ¿¡ »ý±â´Â ¸µÅ©¶ó´Â ÀÛ¾÷¿¡ ´ëÇؼ­¸¸ ´Ù·ç±â·Î ÇÑ´Ù.

6.1 Á¤Àû ¶óÀ̺귯¸® vs °øÀ¯ ¶óÀ̺귯¸®

ÇÁ·Î±×·¥À» ¸¸µå´Â ¸¶Áö¸· ÀÛ¾÷ÀÌ ¹Ù·Î ¸µÅ©(Link)¶ó´Â °úÁ¤ÀÌ´Ù. ÇÊ¿äÇÑ Á¶°¢µéÀ» ¸ðµÎ ¸ðÀ¸°Å³ª ¾î¶² ºÎºÐÀÌ ºüÁ® ÀÖ´ÂÁö ¾Ë¾Æº¸±â À§ÇÑ °úÁ¤ÀÌ´Ù. ºÐ¸íÈ÷ ÇÁ·Î±×·¥µéÀº ÇؾßÇÒ ÀÏÀÌ ¸¹´Ù. ÀÌ ¸ðµç °ÍÀ» ÀÏÀÏÀÌ ´Ù Â¥ÁÖ´Â °ÍÀº ¾Æ´Ï´Ù. ¿¹¸¦ µé¾î È­ÀÏÀ» ¿¬´ÙµçÁö ÇÏ´Â ÀÏÀε¥ ±×·¯ÇÑ ÀϵéÀº ÀÌ¹Ì ¿©·¯ºÐ¿¡°Ô ¶óÀ̺귯¸®¶ó´Â ÇüÅ·ΠÁÖ¾îÁ® ÀÖ´Ù. Æò¹üÇÑ ¸®´ª½º ½Ã½ºÅÛ¿¡¼­´Â /lib¿Í /usr/lib/¿¡¼­ ±×·¯ÇÑ ¶óÀ̺귯¸®µéÀ» ãÀ» ¼ö ÀÖ´Ù.

Á¤Àû ¶óÀ̺귯¸®(Static Library)¸¦ »ç¿ëÇÒ ¶§, ¸µÄ¿´Â ÇÁ·Î±×·¥ÀÌ ÇÊ¿ä·Î ÇÏ´Â ºÎºÐÀ» ¶óÀ̺귯¸®¿¡¼­ ã¾Æ¼­ ±×³É ½ÇÇàÈ­ÀÏ¿¡´Ù Ä«ÇÇÇعö¸°´Ù. °øÀ¯ ¶óÀ̺귯¸®(¶Ç´Â µ¿Àû ¶óÀ̺귯¸®)ÀÇ °æ¿ì¿¡´Â ÀÌ·¸°Ô ÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ½ÇÇàÈ­ÀÏ¿¡´Ù°¡ ´ÜÁö "½ÇÇàµÉ ¶§ ¿ì¼± ÀÌ ¶óÀ̺귯¸®¸¦ ·Îµù½Ãų °Í"À̶ó´Â ¸Þ¼¼Áö¸¸À» ³²°Ü³õ´Â´Ù. ´ç¿¬È÷ °øÀ¯ ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ¸é ½ÇÇàÈ­ÀÏÀÇ Å©±â°¡ ÀÛ¾ÆÁø´Ù. ±×µéÀº ¸Þ¸ð¸®µµ ¶ÇÇÑ Àû°Ô Â÷ÁöÇϸç, ÇÏµå µð½ºÅ©ÀÇ ¿ë·®µµ Àû°Ô Â÷ÁöÇÑ´Ù. ¸®´ª½ºÀÇ ±âº» ÇൿÀº ÀÏ´Ü °øÀ¯ ¶óÀ̺귯¸®°¡ ÀÖÀ¸¸é ±×°Í°ú ¸µÅ©¸¦ ½ÃÅ°°í, ±×·¸Áö ¾ÊÀ¸¸é Á¤Àû ¶óÀ̺귯¸®¸¦ °¡Áö°í ¸µÅ© ÀÛ¾÷À» ÇÑ´Ù. °øÀ¯ ¶óÀ̺귯¸®¸¦ ¾´ ½ÇÇàÈ­ÀÏÀ» ¾ò°íÀÚ Çߴµ¥, ¿ì¿¬Âú°Ô Á¤Àû ½ÇÇàÈ­ÀÏÀÌ ¸¸µé¾îÁ³´Ù¸é ¿ì¼± °øÀ¯ ¶óÀ̺귯¸®°¡ Á¦´ë·Î ÀÖ´ÂÁö(a.outÀº *.sa, ELF´Â *.so)»ìÆ캸°í Àбâ Æ۹̼ÇÀÌ ÁÖ¾îÁ® ÀÖ´ÂÁö ¾Ë¾Æº»´Ù.

¸®´ª½º¿¡¼­ Á¤Àû ¶óÀ̺귯¸®´Â libname.a °ú °°Àº ½ÄÀÇ À̸§À» °®´Â´Ù. ±×¿¡ ºñÇØ °øÀ¯ ¶óÀ̺귯¸®´Â libname.so.x.y.z ¶ó´Â ½ÄÀÇ À̸§À» °®´Âµ¥ x.y.z´Â ¹öÀüÀ» ¶æÇÑ´Ù. ¶ÇÇÑ °øÀ¯ ¶óÀ̺귯¸®´Â Á¾Á¾ ¸µÅ©µÇ¾î ÀÖ´Ù. (¾ÆÁÖ Áß¿ä) libname.so.x ±×¸®°í libname.so¶ó´Â ½ÄÀÇ ¸µÅ©¸¦ °®´Â´Ù. Ç¥ÁØ ¶óÀ̺귯¸®µéÀº ÀÌ µÑÀ» ¸ðµÎ °¡Áö°í ÀÖ´Ù.

¿©·¯ºÐÀº ldd¶ó´Â °ÍÀ» »ç¿ëÇÔÀ¸·Î½á ƯÁ¤ ÇÁ·Î±×·¥ÀÌ ¾î¶² °øÀ¯ ¶óÀ̺귯¸®¸¦ ¿øÇÏ´ÂÁö ¾Ë ¼ö ÀÖ´Ù. (ldd = List Dynamic Dependencies)

$ ldd /usr/bin/lynx
        libncurses.so.1 => /usr/lib/libncurses.so.1.9.6
        libc.so.5 => /lib/libc.so.5.2.18

À§ °á°ú´Â º»ÀÎÀÇ ½Ã½ºÅÛ¿¡¼­ ÅؽºÆ®¿ë À¥ ºê¶ó¿ìÁ®·Î »ç¿ëÇÏ°í ÀÖ´Â lynx ¶ó´Â ÇÁ·Î±×·¥¿¡ ´ëÇÏ¿© ÀÇÁ¸¼º üũ¸¦ Çغ» °á°úÀÌ´Ù. libc.so.5 (C ¶óÀ̺귯¸®)¿Í libncurses.so.1 (Å͹̳ΠÁ¦¾î¿¡ »ç¿ëµÇ´Â ¶óÀ̺귯¸®)¸¦ ÇÊ¿ä·Î ÇÏ°í ÀÖ´Ù°í Ãâ·ÂÇÏ°í ÀÖ´Ù. ¾Æ¹«·± °øÀ¯ ¶óÀ̺귯¸®µµ ÇÊ¿ä¾øÀ¸¸é ±×³É `statically linked' ¶Ç´Â `statically linked (ELF)' ¶ó°í¸¸ Ãâ·ÂÇÑ´Ù.

6.2 ¶óÀ̺귯¸® µé¿©´Ùº¸±â (µµ´ëü sin()Àº ¾îµð¿¡ µé¾îÀִ°¡?)

nm libraryname À̶ó°í ½ÇÇà½ÃÅ°¸é ¶óÀ̺귯¸® ³»ÀÇ ¸ðµç ½Éº¼À» Ãâ·ÂÇØÁØ´Ù. ÀÌ´Â °øÀ¯ ¶óÀ̺귯¸®¿Í Á¤Àû ¶óÀ̺귯¸® µÑ ´Ù Àû¿ëµÈ´Ù. ¸¸¾à tcgetattr()À̶ó´Â ÇÔ¼ö¸¦ ã°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ ÇØÁÖ¸é µÈ´Ù.

$ nm libncurses.so.1 |grep tcget
         U tcgetattr

U°¡ ¶æÇÏ´Â ¹Ù´Â "undefined" Áï ncurses ¶óÀ̺귯¸®°¡ »ç¿ëÇÏ°í´Â ÀÖÁö¸¸ ¾ÆÁ÷ Á¤ÀÇ´Â ÇÏÁö ¾Ê°í ÀÖ´Ù´Â ¶æÀÌ´Ù.

ÀÌ·¸°Ôµµ ÇÒ ¼ö ÀÖ´Ù.

$ nm libc.so.5 | grep tcget
00010fe8 T __tcgetattr
00010fe8 W tcgetattr
00068718 T tcgetpgrp

`W'´Â "weak" Áï ½Éº¼ÀÌ Á¤ÀÇ´Â µÇ¾îÀÖÀ¸³ª ´Ù¸¥ ¶óÀ̺귯¸®¿¡ ÀÇÇØ ÀçÁ¤ÀÇµÉ ¼ö ÀÖ´Â ÇüŶó´Â ÀǹÌÀÌ´Ù. ÀϹÝÀûÀ¸·Î Á¤»óÀûÀÎ °æ¿ì¿¡´Â `T'¶ó°í ¾º¿©Áø´Ù.

sin()ÀÌ ¾îµð¿¡ Àִ°¡¶ó´Â Áú¹®¿¡ ´ëÇÑ °¡Àå ªÀº ´äÀº libm.(so|a)ÀÌ´Ù. <math.h>¿¡ Á¤ÀǵǾî ÀÖ´Â ¸ðµç ÇÔ¼öµéÀº ¹Ù·Î ÀÌ ¼öÇÐ ¶óÀ̺귯¸®¿¡ µé¾îÀÖ´Ù. ±×°ÍÀ» »ç¿ëÇϱâ À§Çؼ­´Â ¸µÅ©½Ã¿¡ -lm ¿É¼ÇÀ» ÁÖ¾î¾ß ÇÑ´Ù. using any of them.

6.3 È­ÀÏ Ã£±â

ld: Output file requires shared library `libfoo.so.1`

ÄÄÆÄÀÏÀ» ÇÏ´Ùº¸¸é À§¿Í °°Àº ¸Þ¼¼Áö°¡ Á¾Á¾ ³ª¿À´Â °ÍÀ» º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ld ±×¸®°í À¯»çÇÑ ÇÁ·Î±×·¥µéÀÌ È­ÀÏÀ» ã´Â ¹æ½ÄÀº ¹öÀü¿¡ µû¶ó ´Ù¸£Áö¸¸ ±âº»ÀûÀ¸·Î /usr/lib¸¦ ã°Ô µÈ´Ù. ÀÌ °÷ ¸»°íµµ ´Ù¸¥ °÷¿¡ ¶óÀ̺귯¸®¸¦ °¡Áö°í ÀÖ°í ±×°ÍÀ» ld ¿¡°Ô ¾Ë·ÁÁÖ±â À§Çؼ­´Â gcc ³ª ld ¿¡°Ô ¶óÀ̺귯¸®°¡ ÀÕ´Â µð·ºÅ丮¸¦ -L ¿É¼ÇÀ» Á༭ ¾Ë¸°´Ù.

-L ¿É¼ÇÀ» Á־ ¾ÈµÈ´Ù¸é, ld °¡ ¿øÇÏ´Â È­ÀÏÀÌ ÀûÀýÇÑ Àå¼Ò¿¡ °¡ ÀÖ´ÂÁö È®ÀÎÇغ¸¶ó. a.out ¿¡ ´ëÇؼ­´Â -lfoo ¶ó°í Çϸé ld´Â libfoo.sa (°øÀ¯ ¶óÀ̺귯¸®)¸¦ ã°Ô µÈ´Ù. ¸¸¾à ±×°ÍÀ» ã´Âµ¥ ½ÇÆÐÇϸé libfoo.a (Á¤Àû ¶óÀ̺귯¸®)¶ó´Â È­ÀÏÀ» ã´Â´Ù. ELF¿¡ ÇÑÇؼ­´Â libfoo.so¸¦ ã°í ³ª¼­ libfoo.a¸¦ ã´Â´Ù. libfoo.so´Â libfoo.so.x¿¡ ´ëÇÑ ¸µÅ©ÀÌ´Ù.

6.4 ¿©·¯ºÐ¸¸ÀÇ ¶óÀ̺귯¸® ¸¸µé±â

¹öÀü °ü¸®

´Ù¸¥ ¸ðµç ÇÁ·Î±×·¥°ú ¸¶Âù°¡Áö·Î ¶óÀ̺귯¸® ¶ÇÇÑ °è¼ÓÀûÀ¸·Î ¹ö±×¸¦ Àâ¾Æ°¡¾ß ÇÑ´Ù. ¶Ç´Â »õ·Î¿î ±â´ÉÀ» µµÀÔÇϰųª ÇöÀç ÀÖ´Â °ÍÀ» ´õ È¿À²ÀûÀÎ °ÍÀ¸·Î ±³Ã¼ÇÑ´ÙµçÁö ±×¸®°í ÇÊ¿ä¾ø´Â °ÍÀº ¾ø¾Ö¹ö¸°´ÙµçÁö ÇÏ´Â ÀÏÀÌ ÇÊ¿äÇÏ´Ù. ÀÌ·± °æ¿ì º¯È­ÇÏ´Â ¶óÀ̺귯¸®¸¦ °¡Áö°í ÇÁ·Î±×·¡¹ÖÇÏ´Â °ÍÀº ¹®Á¦°¡ ¾Æ´Ò ¼ö ¾ø´Ù. ¸¸¾à »ç¶óÁ®¹ö¸° ¿¾ ±â´É¿¡ ÀÇÁ¸ÇÏ´Â ÇÁ·Î±×·¥À̶ó¸é?

±×·¡¼­ ¿ì¸®´Â ¶óÀ̺귯¸® ¹öÀüÀ̶ó°í ÇÏ´Â °ÍÀ» µµÀÔÇÑ´Ù. ±×¸®°í ¶óÀ̺귯¸®ÀÇ º¯È­¸¦ ¸¶ÀÌ³Ê ¶Ç´Â ¸ÞÀÌÀú º¯È­ ÀÌ·¸°Ô ºÐ·ùÇÏ°í ¸¶ÀÌ³Ê ¾÷±×·¹À̵å´Â ±âÁ¸ÀÇ ÇÁ·Î±×·¥µé°ú Ãæµ¹ÀÌ ¾ø´Â º¯È­¸¦ ÁöĪÇÏ°Ô ÇÑ´Ù. ¶óÀ̺귯¸®ÀÇ ¹öÀüÀº È­ÀϸíÀ» º¸¸é ¾Ë ¼ö ÀÖ´Ù. (»ç½Ç ¾ö¹ÐÈ÷ ¸»ÇÏÀÚ¸é, ELF¿¡ ´ëÇؼ­´Â °ÅÁþ¸»ÀÌ´Ù. ¿Ö ±×·¯ÇÑÁö´Â °è¼Ó Àо¸é ³ª¿Ã °ÍÀÌ´Ù) libfoo.so.1.2´Â ¸ÞÀÌÀú ¹öÀü 1 ÀÌ°í ¸¶ÀÌ³Ê ¹öÀü2 ÀÌ´Ù. ¸¶ÀÌ³Ê ¹öÀüµµ ´Ù¼Ò Áß¿äÇÑ °ÍÀÌ µÉ ¼öµµ ÀÖ´Ù. libcÀÇ °æ¿ì¿¡´Â ¸¶À̳ʹöÀü¿¡´Ù ÆÐÄ¡·¹º§À» Áý¾î³Ö´Â´Ù. µû¶ó¼­ libc.so.5.2.18°ú °°Àº À̸§ÀÌ »ý±ä´Ù. ¼ýÀÚ ¸»°íµµ ¹®ÀÚ, ¾ð´õ½ºÄھÀÚ(_), ¶Ç´Â ÇÁ¸°Æ® °¡´ÉÇÑ ¹®ÀÚ¸¦ ³Ö¾îµµ ÁÁ´Ù.

ELF¿Í a.out Çü½ÄÀÇ Ä¿´Ù¶õ Â÷ÀÌÁ¡ Áß¿¡ Çϳª°¡ ¹Ù·Î °øÀ¯ ¶óÀ̺귯¸®¸¦ ¸¸µå´Â ¹æ½Ä¿¡ ÀÖ´Ù. ¿ì¼±Àº ELF¸¦ ¾Ë¾Æº¸±â·Î ÇÏÀÚ. ¿Ö³ÄÇÏ¸é ´õ ½±±â ¶§¹®ÀÌ´Ù.

ELF? µµ´ëü ±×°Ô ¹«¾ùÀΰ¡?

ELF (Executable and Linking Format)À̶ó°í ÇÏ´Â °ÍÀº ¿ø·¡ USL(UNIX System Laboratories)¶ó°í ÇÏ´Â °÷¿¡¼­ °³¹ßÇÑ ¹ÙÀ̳ʸ® Çü½ÄÀÌ´Ù. ±×¸®°í ÇöÀç´Â ¼Ö¶ó¸®½º¿Í SVR4¿¡¼­ »ç¿ë ÁßÀÌ´Ù. ¸®´ª½º°¡ »ç¿ëÇØ¿Ô´ø ¿À·¡µÈ a.outº¸´Ù ´õ¿í ´õ ÁÁÀº À¯¿¬¼º ¶§¹®¿¡ GCC¿Í C ¶óÀ̺귯¸® °³¹ßÀÚµéÀº Áö³­ ÇØ ¸®´ª½º Ç¥ÁØ ¹ÙÀ̳ʸ® Çü½Ä°ú ¸¶Âù°¡Áö·Î ELF·Î À̵¿Çϱâ·Î °áÁ¤ÇÏ¿´´Ù.

´Ù½Ã ÇÑ ¹ø ´õ?

À̹ø ¼½¼ÇÀº '/news-archives/comp.sys.sun.misc' ¹®¼­·ÎºÎÅÍ ³ª¿À´Â ³»¿ëÀÌ´Ù.

ELF ("Executable Linking Format)¶ó°í ÇÏ´Â °ÍÀº "»õ·Ó°í Çâ»óµÈ" ¿ÀºêÁ§Æ® È­ÀÏ Çü½ÄÀ¸·Î¼­ SVR4 ¿¡ µµÀԵǾú´Ù. ELF´Â ±×³É COFF ¹æ½Äº¸´Ù ´õ¿í °­·ÂÇÏ´Ù. ¿Ö³ÄÇÏ¸é »ç¿ëÀÚ È®À强ÀÌ Àֱ⠶§¹®ÀÌ´Ù. ELF´Â ¿ÀºêÁ§Æ® È­ÀÏÀ» ÀÓÀÇÀÇ ±æÀ̸¦ °®´Â ¼½¼ÇµéÀÇ ¸®½ºÆ®¶ó°í¸¸ »ý°¢ÇÑ´Ù. ±×°ÍÀº °íÁ¤µÈ Å©±âÀÇ °´Ã¼À» °®´Â ¹è¿­°ú´Â ´Ù¸£´Ù. ÀÌ·¯ÇÑ ¼½¼ÇÀº COFF¿Í´Â ´Þ¸® ƯÁ¤ À§Ä¡¿¡ ÀÖÀ» ÇÊ¿äµµ ¾ø°í, ¶ÇÇÑ Æ¯¼öÇÑ ¼ø¼­´ë·Î ³õ¿©ÀÖÀ» ÇÊ¿äµµ ¾ø´Ù. »ç¿ëÀÚµéÀº ¿øÇÑ´Ù¸é »õ·Î¿î ¼½¼ÇÀ» ÷°¡ÇÒ ¼ö ÀÖ´Ù. ELF´Â ¶ÇÇÑ DWARF(Debugging With Attribute Record Format)¶ó°í ÇÏ´Â ¾ÆÁÖ ¾ÆÁÖ °­·ÂÇÑ µð¹ö±ë Æ÷¸ËÀ» °¡Áö°í ÀÖ´Ù. - ¸®´ª½º¿¡¼­´Â ¾ÆÁ÷ ¿Ïº®È÷ ±¸ÇöµÇ°í ÀÖÁö´Â ¾Ê´Ù. ÇÏÁö¸¸ ÀÛ¾÷ÀÌ ÁøÇà ÁßÀÌ´Ù DWARF DIEµé(¶Ç´Â Debugging Information Entries) ELF ¿¡¼­ .debug ¼½¼ÇÀ» Çü¼ºÇÑ´Ù. °íÁ¤µÈ Å©±âÀÇ ÀÛÀº Á¤º¸µé ´ë½Å¿¡ DWARF DIEµéÀº °¢°¢ ÀÓÀÇÀÇ ±æÀ̸¦ °®´Â º¹ÀâÇÑ ¼Ó¼ºµéÀ» Æ÷ÇÔÇÏ°í ÀÖÀ¸¸ç ¿µ¿ªº°·Î ÇÁ·Î±×·¥ µ¥ÀÌŸÀÇ Æ®¸®±¸Á¶·Î¾º¿©Á® ÀÖ´Ù. DIE´Â COFF .debug ¼½¼Çº¸´Ù ¸¹Àº ¾çÀÇ Á¤º¸¸¦ Àâ¾Æ³¾ ¼ö ÀÖ´Ù.(COFFÀÇ °æ¿ì¿¡´Â C++ °è½Â ±×·¡ÇÁ¿Í °°Àº °ÍµéÀ» Àâ¾Æ³¾ ¼ö ¾ø´Ù.)
ELF È­ÀϵéÀº SVR4(¼Ö¶ó¸®½º 2.0 ?)ÀÇ ELF Á¢±Ù ¶óÀ̺귯¸®¸¦ ÅëÇؼ­ Á¢±ÙÇÒ ¼ö ÀÖ´Ù. ±× ¶óÀ̺귯¸®´Â ELF¿¡ ´ëÇÏ¿© ½±°í ºü¸¥ ÀÎÅÍÆäÀ̽º¸¦ Á¦°øÇÏ°í ÀÖ´Ù. ELF Á¢±Ù ¶óÀ̺귯¸®¸¦ ¾²¸é¼­ »ý±â´Â Áß¿äÇÑ ÀÕÁ¡ÁßÀÇ Çϳª´Â ELF È­ÀÏÀ» À¯´Ð½º È­ÀϷμ­ º¼ ÇÊ¿ä°¡ ÀüÇô ¾ø´Ù´Â °ÍÀÌ´Ù. ±×°ÍÀº ´ÜÁö Elf * ·Î¼­ Á¢±Ù°¡´ÉÇÏ´Ù. elf_open() È£ÃâÀ» ÇÏ¸é ±× ´ÙÀ½ºÎÅÍ °¡´ÉÇÏ´Ù. ±× ÈÄ¿¡ elf_foobar()¿Í °°Àº ÀÛ¾÷À» ÇÑ´Ù. ÀÌ´Â ¿¹ÀüÀÇ COFF ¹æ½Ä¿¡¼­ ½ÇÁ¦ µð½ºÅ© »óÀÇ À̹ÌÁö¸¦ °¡Áö°í ÀÛ¾÷Çß´ø °Í°ú´Â ÀüÇô ´Ù¸¥ °ÍÀÌ´Ù.

ELF¿¡ ´ëÇÑ Âù¼º/¹Ý´ë, ±×¸®°í ÇöÀçÀÇ a.out ½Ã½ºÅÛÀ» ELF Áö¿ø ½Ã½ºÅÛÀ¸·Î ¾÷±×·¹À̵åÇØ¾ß ÇÒ Çʿ伺µéÀº ELFÇÏ¿ìÅõ ¹®¼­¿¡¼­ ´Ù·ç°í ÀÖÀ¸¸ç º»ÀÎÀº ±×°ÍÀ» ¿©±â¿¡ Àû°íÀÚ ÇÏÁö´Â ¾Ê´Â´Ù.

ELF °øÀ¯ ¶óÀ̺귯¸®

libfoo.so¶ó´Â °øÀ¯ ¶óÀ̺ñ¸£·¯¸¦ ¸¸µé±â À§ÇÑ ±âº»ÀûÀÎ ÀýÂ÷´Â ´ÙÀ½°ú °°´Ù.

$ gcc -fPIC -c *.c
$ gcc -shared -Wl,-soname,libfoo.so.1 -o libfoo.so.1.0 *.o
$ ln -s libfoo.so.1.0 libfoo.so.1
$ ln -s libfoo.so.1 libfoo.so
$ LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH ; export LD_LIBRARY_PATH

ÀÌ·¸°Ô Çϸé libfoo.so.1.0À̶ó´Â °øÀ¯ ¶óÀ̺귯¸®°¡ ¸¸µé¾îÁú °ÍÀÌ´Ù. ±×¸®°í ld (libfoo.so ÇÊ¿ä)¿Í µ¿Àû ¸µÄ¿(libfoo.so.1 ÇÊ¿ä)¿¡ ÇÊ¿äÇÑ ÀûÀýÇÑ ¸µÅ©°¡ ¸¸µé¾îÁø´Ù. ±×°ÍÀ» Å×½ºÆ®Çغ¸±â À§Çؼ­ ¿ì¸®´Â LD_LIBRARY_PATH¿¡´Ù ÇöÀç µð·ºÅ丮¸¦ ÷°¡ÇÑ´Ù.

¸¸¾à ¶óÀ̺귯¸®°¡ Á¦´ë·Î ÀÛµ¿ÇÑ´Ù´Â °ÍÀ» È®ÀÎÇϸé, ±× ¶óÀ̺귯¸®¸¦ /usr/local/lib·Î À̵¿½ÃŲ´Ù. ±×¸®°í ´Ù½Ã ¸µÅ©¸¦ ¸¸µé¾îÁØ´Ù. libfoo.so.1·ÎºÎÅÍ libfoo.so.1.0¿¡ À̸£´Â ¸µÅ©´Â ldconfig¶ó°í ÇÏ´Â ÇÁ·Î±×·¥¿¡ ÀÇÇØ Ç×»ó ÃֽŠÁ¤º¸·Î °ü¸®µÈ´Ù. º¸ÅëÀº ºÎÆðúÁ¤¿¡¼­ ¾Ë¾Æ¼­ ÇØÁØ´Ù. ÇÏÁö¸¸ libfoo.so´Â ¼öµ¿À¸·Î ÇØÁÖ¾î¾ß ÇÑ´Ù. ¿©·¯ºÐÀÌ Çѹø¿¡ ÇÑ ¶óÀ̺귯¸®ÀÇ ¸ðµç ºÎºÐµé(¿¹¸¦ µé¾î Çì´õÈ­Àϵµ ÇØ´ç) ²Ä²ÄÈ÷ ¾÷±×·¹À̵åÇØÁÖ·Á°í ÇÑ´Ù¸é libfoo.so -> libfoo.so.1À̶ó´Â ¸µÅ©¸¦ ¸¸µé¾î ÁÖ¸é µÈ´Ù. ±×·¸°Ô µÇ¸é ldconfig°¡ ¾Ë¾Æ¼­ ¸µÅ©¸¦ °ü¸®ÇØÁØ´Ù. ¸¸¾à¿¡ ÀÌ·± °Í±îÁö ¸ðµÎ ¿©·¯ºÐ ½º½º·Î ¸ðµÎ ÇàÇÏ·Á°í ÇÑ´Ù¸é ³ªÁß¿¡ ¹®Á¦°¡ »ý±æ ¼öµµ ÀÖ´Ù. ºÐ¸íÈ÷ ¸»Çصξú´Ù.

$ su
# cp libfoo.so.1.0 /usr/local/lib
# /sbin/ldconfig
# ( cd /usr/local/lib ; ln -s libfoo.so.1 libfoo.so )

¹öÀü ¹øÈ£ ºÙÀ̱â, soname ±×¸®°í ½Éº¼¸¯ ¸µÅ©

°¢ ¶óÀ̺귯¸®´Â sonameÀ̶ó´Â °ÍÀ» °¡Áö°í ÀÖ´Ù. ¸µÄ¿°¡ ã°í ÀÖ´Â ¶óÀ̺귯¸® ¾È¿¡¼­ ÀÌ·¯ÇÑ À̸§À» ¹ß°ßÇÏ°Ô µÇ¸é, ½ÇÁ¦ È­Àϸí(libfoo.so¿Í °°Àº À̸§)ÀÌ ¾Æ´Ï¶ó sonameÀ̶ó°í ÇÏ´Â °ÍÀ» ½ÇÇà ¹ÙÀ̳ʸ®¿¡ Ç¥½ÃÇصдÙ. ½ÇÇà½Ã¿¡´Â µ¿Àû ·Î´õ°¡ sonameÀ» °®´Â È­ÀÏÀ» ã°Ô µÈ´Ù. ÀÌ ¿ª½Ã È­ÀϸíÀÌ ¾Æ´Ï´Ù. ÀÌ´Â ¹«¾ùÀ» ÀǹÌÇϴ°¡? Çϸé libfoo.so È­ÀϸíÀ» °¡Áø ¶óÀ̺귯¸®´Â libbar.so¶ó´Â sonameÀ» °¡Áú ¼öµµ ÀÖ°í ±×°÷¿¡ ¸µÅ©µÈ ¸ðµç ÇÁ·Î±×·¥Àº °á±¹ libbar.so¸¦ ã´Â´Ù´Â °ÍÀÌ´Ù.

ÀÌ°ÍÀº »ó´çÈ÷ ¹«ÀǹÌÇÑ ±â´Éó·³ º¸À̴µ¥ »ç½ÇÀº ÀÌ°ÍÀ̾߸»·Î °°Àº ¶óÀ̺귯¸®ÀÇ ¼­·Î ´Ù¸¥ ¹öÀüÀÌ ¾î¶»°Ô ÇÑ ½Ã½ºÅÛ¿¡¼­ °øÁ¸ÇÒ ¼ö Àִ°¡¸¦ ÀÌÇØÇϴµ¥ ÀÖ¾î ÇÙ½ÉÀûÀÎ ºÎºÐÀÌ´Ù. ¸®´ª½º¿¡¼­ ¶óÀ̺귯¸® À̸§Áþ´Â »ç½Ç»óÀÇ Ç¥ÁØÀº ¶óÀ̺귯¸®¸¦ libfoo.so.1.2 ÀÌ·± ½ÄÀ¸·Î ºÎ¸£°í libfoo.so.1À̶ó´Â sonameÀ» ºÎ¿©ÇÏ´Â °ÍÀÌ´Ù. ¸¸¾à Ç¥ÁØ ¶óÀ̺귯¸® µð·ºÅ丮(¿¹¸¦ µé¾î/usr/lib)¿¡ Ãß°¡µÇ¸é ldconfig´Â libfoo.so.1 -> libfoo.so.1.2¶ó´Â ¸µÅ©¸¦ ¸¸µé¾î ÁÙ °ÍÀÌ´Ù. ±×·¸°Ô ÇÔÀ¸·Î½á ½ÇÇà½Ã¿¡ ÀûÀýÇÑ À̹ÌÁö°¡ ¼±Åõǵµ·Ï ÇØÁØ´Ù. ¿©·¯ºÐÀº ¶ÇÇÑ libfoo.so -> libfoo.so.1À̶ó´Â ½Éº¼¸¯ ¸µÅ©µµ ÇÊ¿äÇÏ´Ù. ¿Ö³ÄÇϸé ld °¡ ¸µÅ©ÇÒ ¶§ Á¤È®ÇÑ soname À» ã°Ô Çϱâ À§Çؼ­ÀÌ´Ù.

µû¶ó¼­ ¶óÀ̺귯¸®ÀÇ ¹ö±×¸¦ °íÄ¥ ¶§ ¶Ç´Â »õ·Î¿î ±â´ÉÀ» ÷°¡ÇÒ ¶§(±âÁ¸ÀÇ ÇÁ·Î±×·¥¿¡ ¾Ç¿µÇâÀ» ÁÖÁö ¾Ê´Â º¯È­µé), ´Ù½Ã ¶óÀ̺귯¸®¸¦ ¸¸µé°í °°Àº sonameÀ» ÁÖ°í È­ÀϸíÀº ¹Ù²Ùµµ·Ï ÇÑ´Ù. ¸¸¾à ¿©·¯ºÐÀÇ ¶óÀ̺귯¸®¿Í ¸µÅ©µÇ¾î ÀÖ´Â ±âÁ¸ÀÇ ÇÁ·Î±×·¥µé°ú Ãæµ¹ÇÏ°Ô µÇ´Â ¶óÀ̺귯¸®·Î º¯È­ÇÒ ¶§´Â sonameÀÇ ¼ýÀÚ¸¦ Çϳª ´Ã¸®¸é µÈ´Ù. ÀÌ·¯ÇÑ °æ¿ì »õ·Î¿î ¹öÀüÀÇ ¶óÀ̺귯¸®´Â libfoo.so.2.0ÀÌ µÉÅ×°í, sonameÀº libfoo.so.2°¡ µÉ °ÍÀÌ´Ù. ±×¸®°í À̹ø¿¡´Â libfoo.so¸¦ »õ·Î¿î ¹öÀüÀÇ ¶óÀ̺귯ÀÌ¿¡ ½Éº¼¸¯ ¸µÅ©½ÃÅ°µµ·Ï ÇÏÀÚ.

¿©·¯ºÐÀÌ ²À ÀÌ·± ½ÄÀ¸·Î ¶óÀ̺귯¸® À̸§À» Áö¾îÁÙ ÇÊ¿ä´Â ¾ø´Ù. ÇÏÁö¸¸ ±×°ÍÀº ±¦ÂúÀº °ü½ÀÀÌ´Ù. ELF´Â ¿©·¯ºÐ¿¡°Ô ¶óÀ̺귯¸® À̸§Áþ±â¿¡ ÀÖ¾î À¯¿¬¼ºÀ» ÁÖ°í ÀÖÁö¸¸ ±×·¸´Ù°í Çؼ­ ²À ±×·¸°Ô¸¸ Ç϶ó´Â °ÍÀº ¾Æ´Ï´Ù.

¿ä¾àÇÏÀÚ¸é, ¿©·¯ºÐÀÌ È£È¯¼ºÀ» ±ú´Â °ÍÀÌ ¸ÞÀÌÀú ¾÷±×·¹À̵åÀÌ°í ±×·¸Áö ¾ÊÀº °ÍÀÌ ¸¶ÀÌ³Ê ¾÷±×·¹À̵å¶ó´Â ÀüÅëÀ» ÁؼöÇÑ´Ù¸é ´ÙÀ½°ú °°ÀÌ Ç϶ó.

gcc -shared -Wl,-soname,libfoo.so.major -o libfoo.so.major.minor

¸ðµç °ÍÀÌ Á¦´ë·Î µÉ °ÍÀÌ´Ù.

a.out ÀüÅëÀûÀÎ Çü½Ä

°øÀ¯ ¶óÀ̺귯¸® ¸¸µé±âÀÇ ¿ëÀÌÇÔÀº ELF·ÎÀÇ ¾÷±×·¹À̵忡 ´ëÇÑ Áß¿äÇÑ ÀÌÀ¯ÀÌ´Ù. a.outÀ¸·Î °¡´ÉÇϱâ´Â ÇÏ´Ù. ftp://tsx-11.mit.edu/pub/linux/packages/GCC/src/tools-2.17.tar.gz¸¦ ¹Þ¾Æ¿ÀÀÚ. ±×¸®°í ±× È­ÀÏÀ» Ç®¾î¼­ ³ª¿À´Â 20 ÆäÀÌÁöÂ¥¸® ¹®¼­¸¦ Àо´Ù. ³²µé¿¡°Ô »·È÷ º¸ÀÌ´Â ¿­¼ºÁöÁöÀÚ°¡ µÇ°í ½ÍÁö´Â ¾Ê´Ù. ÇÏÁö¸¸ ³ª´Â ³ª ÀÚ½ÅÀ» ±ÍÂú°Ô ÇÏ°í ½ÍÁö´Â ¾Ê´Ù. :-)

ZMAGIC vs QMAGIC

QMAGIC À̶ó°í ÇÏ´Â °ÍÀº ¿¹ÀüÀÇ a.out(ZMAGIC À̶ó°í ¾Ë·ÁÁ® ÀÖ´Ù)°ú ¸¶Âù°¡Áö·Î ½ÇÇà È­ÀÏÀÇ Çü½ÄÀÌ´Ù. ÇÏÁö¸¸ ù¹ø° ÆäÀÌÁö´Â ¸ÅÇÎÇÏÁö ¾Ê´Â ¹ÙÀ̳ʸ®ÀÌ´Ù. 0-4096 ±îÁö ¾î¶°ÇÑ ¸ÅÇεµ Á¸ÀçÇÏÁö ¾Ê±â ¶§¹®¿¡ ÀÌ·¸°Ô ÇÔÀ¸·Î½á NULL µð·¹ÆÛ·±½Ã Æ®·¡ÇÎ(deference trapping)À» ¾ÆÁÖ ½±°Ô ÇÒ ¼ö ÀÖ´Ù. ºÎÂ÷ÀûÀÎ È¿°ú·Î¼­ ¿©·¯ºÐÀÇ ½ÇÇàÈ­ÀÏÀº ¾à 1K Á¤µµ ÀÛ¾ÆÁö°Ô µÈ´Ù.

±¸½Ä ¸µÄ¿µéÀº ¿À·ÎÁö ZMAGIC ¸¸À» Áö¿øÇÑ´Ù. ¾à°£ ´ú ±¸½ÄÀÇ ¸µÄ¿µéÀº µÑ ´Ù Áö¿øÇϸé, ÃֽŠ¹öÀüµéÀº ¿À·ÎÁö QMAGIC ¸¸À» Áö¿øÇÏ°í ÀÖ´Ù. ÀÌ°ÍÀº º°·Î Áß¿äÇÏÁö ¾Ê´Ù. ¿Ö³ÄÇϸé Ä¿³Î ÀÚü°¡ µÎ °¡Áö¸¦ ¸ðµÎ ½ÇÇà½Ãų ¼ö Àֱ⠶§¹®ÀÌ´Ù.

file ¸í·ÉÀ» ÁÖ¸é ±×°ÍÀÌ QMAGICÀÎÁö ÆǺ°ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.

È­ÀÏ À§Ä¡(File Placement)

a.out(DLL) °øÀ¯ ¶óÀ̺귯¸®´Â 2 °³ÀÇ ½ÇÁ¦ÀûÀÎ È­ÀÏ ±×¸®°í ÇϳªÀÇ ¸µÅ©·Î ±¸¼º µÇ¾î ÀÖ´Ù. ÀÌ ¹®¼­ Àüü¸¦ ÅëÇؼ­ °è¼Ó »ç¿ëÇØ¿Â À̸§ÀÎ foo ¶ó´Â ¶óÀ̺귯¸®¿¡ ´ëÇÏ¿© ¿¹¸¦ µé¾î ¾Ë¾Æº¸ÀÚ. foo ¿¡ ´ëÇÏ¿© libfoo.sa, libfoo.so.1.2 ±×¸®°í libfoo.so.1 À̶ó´Â ¸µÅ©·Î ±¸¼ºµÇ¾î ÀÖ´Ù. ¸µÅ©´Â libfoo.so.1.2¸¦ °¡¸®Å²´Ù. ÀÌ°Íµé ¸ðµÎ ¹«¾ùÀΰ¡?

ÄÄÆÄÀÏÇÒ ¶§ ld´Â libfoo.sa¸¦ ã´Â´Ù. ÀÌ°ÍÀ̾߸»·Î ¶óÀ̺귯¸®¿¡ ´ëÇÑ ±×·çÅͱâ È­ÀÏÀÌ µÈ´Ù. ±×¸®°í ¸µÅ©°úÁ¤¿¡ ´ëÇÑ ¸ðµç ¿ÜºÎ µ¥ÀÌŸ¿Í ÇÔ¼ö¿¡ ´ëÇÑ Æ÷ÀÎÅ͸¦ Áö´Ï°í ÀÖ´Ù.

ÇÏÁö¸¸ ½ÇÇà½Ã¿¡´Â µ¿Àû ·Î´õ°¡ libfoo.so.1À» ã´Â´Ù. ÀÌ´Â ½ÇÁ¦ È­ÀÏÀÌ ¾Æ´Ï¶ó ½Éº¼¸¯ ¸µÅ©ÀÌ´Ù. ±× ÀÌÀ¯´Â ¾Õ¼­¿Í ¸¶Âù°¡Áö·Î ¶óÀ̺귯¸®°¡ ±âÁ¸ÀÇ ¾îÇø®ÄÉÀ̼ǰúÀÇ Ãæµ¹¾øÀÌ, ´õ »õ·Î¿î, ¹ö±×°¡ ÀâÈù »õ·Î¿î ¹öÀüÀ¸·Î ±³Ã¼µÉ ¼ö ÀÖµµ·Ï Çϱâ À§Çؼ­ÀÌ´Ù. »õ·Î¿î ¹öÀüÀÌ ³ª¿À¸é(¿¹¸¦ µé¾î libfoo.so.1.3)À̶ó°í ÇÏÀÚ. ldconfig¸¦ ½ÇÇà½ÃÅ°¸é ÀÚµ¿À¸·Î libfoo.so.1 --> libfoo.so.1.3 ¸µÅ© ÀÛ¾÷À» ÇØ ÁÙ °ÍÀÌ´Ù. ±¸¹öÀüÀ» ¾²´Â ÇÁ·Î±×·¥µµ ¾Æ¹« ÀÌ»óÀÌ ¾øÀ» °ÍÀÌ´Ù.

DLL ¶óÀ̺귯¸®(µ¿¾î¹Ýº¹À̶ó´Â »ç½ÇÀº ¾Ë°í ÀÖ´Ù. ¿ªÀÚ ÁÖ :DLL ¿¡ ÀÌ¹Ì ¶óÀ̺귯¸®¶ó´Â ¸»ÀÌ µé¾îÀÖ´Ù)´Â Á¾Á¾ Á¤Àû ¶óÀ̺귯¸®º¸´Ù Å©´Ù. DLLÀº ¹Ì·¡ÀÇ È®À强À» À§Çؼ­ »½ ¶Ô¸° ±¸¸ÛÀÇ ÇüÅ·ΠÀÚ¸®¸¦ À¯º¸ÇصдÙ. ÇÏÁö¸¸ ±× ÀÚ¸®´Â µð½ºÅ© ¿µ¿ªÀ» Â÷ÁöÇÏÁö´Â ¾Êµµ·Ï ÇÒ ¼ö ÀÖ´Ù. °£´ÜÇÑ cp³ª makeholeÀ̶ó´Â ÇÁ·Î±×·¥À¸·Î ÀÌ·¸°Ô ÇÏ´Â °ÍÀÌ °¡´ÉÇÏ´Ù. ÀÌ¹Ì °íÁ¤µÈ À§Ä¡¿¡ ÁÖ¼ÒµéÀÌ ÀÖÀ¸¹Ç·Î ¶óÀ̺귯¸® »ý¼º ÈÄ¿¡ strip ÇÒ ¼ö ÀÖ´Ù. ÇÏÁö¸¸ ELF ¶óÀ̺귯¸®¿¡ ´ëÇؼ­´Â stripÇÏÁö ¸»¶ó.

libc-lite ¶õ ¹«¾ùÀΰ¡?

libc-lite ¶ó°í ÇÏ´Â °ÍÀº libc ¿¡ ´ëÇÑ ¼Ò±Ô¸ð ¹öÀüÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. ÇϳªÀÇ Ç÷ÎÇÇ ¾È¿¡ µé¾î°¡°í À¯´Ð½ºÀÇ ÀÚÀßÇÑ ¸¹Àº ¾÷¹«µé¿¡ ÃæºÐÇÑ Á¤µµ¸¸À¸·Î ±¸¼ºµÈ ¶óÀ̺귯¸®ÀÌ´Ù. ±×°ÍÀº curses ³ª dbm, termcap µîÀÇ Äڵ带 Æ÷ÇÔÇÏ°í ÀÖÁö ¾Ê´Ù. ¸¸¾à ¿©·¯ºÐÀÇ /lib/libc.so.4°¡ lite ¹öÀüÀÇ ¶óÀ̺귯¸®¿¡ ¸µÅ©µÇ¾î ÀÖ´Ù¸é Áï½Ã ¿ÏÀüÇÑ libc ¹öÀüÀ¸·Î ±³Ã¼Çϱ⠹ٶõ´Ù.

º¸Åë ½½·¢¿þ¾îÀÇ ·çÆ® µð½ºÄÏÀ» ¸¶¿îÆ®Çغ¸¸é ÀÌ lite ¹öÀüÀÇ C ¶óÀ̺귯¸®°¡ µé¾îÀÖÀ½À» ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¼³Ä¡ Áغñ¿Í ¼³Ä¡¿¡ ÇÊ¿äÇÑ ¸¸Å­ÀÇ ÀÛÀº C ¶óÀ̺귯¸®ÀÌ´Ù.

¸µÅ©Çϱâ : ÀϹÝÀûÀÎ ¹®Á¦µé

¿©·¯ºÐÀÇ ¸µÅ© ¹®Á¦¸¦ ³»°Ô º¸³»´Þ¶ó! ±×·¯¸é ±×°Í¿¡ ´ëÇؼ­ ³ª´Â ¾Æ¹« Àϵµ ÇÏÁö ¾ÊÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ ¸¹ÀÌ ½×ÀÌ´Â ¹®Á¦¿¡ ´ëÇؼ­´Â ±ÛÀ» ¾²°Ú´Ù.

°øÀ¯ ¶óÀ̺귯¸®¿Í ¸µÅ©µÇ±æ ¹Ù¶ó´Âµ¥ Á¤Àû ¶óÀ̺귯¸®¿Í ¸µÅ©µÇ°í ÀÖ´Ù.

¿ì¼±Àº ld°¡ °øÀ¯¶óÀ̺귯¸®¸¦ Á¦´ë·Î ãÀ» ¼ö ÀÖµµ·Ï ¸µÅ©°¡ ¾Ë¸Â°Ô µÇ¾î ÀÖ´ÂÁö Á¡°ËÇÑ´Ù. ELF¿¡ ´ëÇؼ­¶ó¸é ÀÌ°ÍÀº libfoo.so ½Éº¼¸¯ ¸µÅ©¸¦ ¸»Çϸç a.outÀÇ °æ¿ì¿¡´Â libfoo.saÈ­ÀÏÀ» ¸»ÇÏ´Â °ÍÀÌ´Ù. ELF binutil 2.5 ¹öÀü¿¡¼­ 2.6 ¹öÀüÀ¸·Î ¾÷±×·¹À̵åÇÑ ¸¹Àº »ç¶÷µéÀÌ °Þ°í ÀÖ´Â ¹®Á¦ÀÌ´Ù. Àü ¹öÀüÀÌ °øÀ¯ ¶óÀ̺귯¸®¿¡ ´ëÇÏ¿© ¿ÀÈ÷·Á ´õ ¶È¶ÈÇÏ°Ô Ã£¾Æ³Â´Âµ¥, ±× »ç¶÷µéÀº ¸ðµç ¸µÅ©¸¦ Á¦´ë·Î ¸¸µéÁö ¾Ê¾Ò´ø °ÍÀÌ´Ù. ÁöÀûÀÎ Çൿ¾ç½ÄÀ» ´Ù¸¥ ¸ðµç ¼³°è¹æ½Ä°úÀÇ È£È¯¼ºÀ» À§Çؼ­ ½Å¹öÀü¿¡¼­ Á¦°ÅµÇ¾ú´Ù. ÁöÀû Çൿ¾ç½ÄÀº À߸øµÈ °¡Á¤À» °®°Ô µÇ°í ¿ÀÈ÷·Á ´õ ¸¹Àº ¹®Á¦¸¦ ³º±â ¶§¹®¿¡ ±×·¸°Ô ÇÑ °ÍÀÌ´Ù.

DLL ÅøÀÎ mkimage °¡ libgcc¸¦ ã´Âµ¥ ½ÇÆÐÇÑ´Ù.

libc.so.4.5.x¿Í ±× ÀÌ»óÀÇ ¹öÀü¿¡ °üÇÏ¿© libgcc´Â ´õ ÀÌ»ó °øÀ¯ ¶óÀ̺귯¸®°¡ ¾Æ´Ï´Ù. µû¶ó¼­ ¿©·¯ºÐÀº `-lgcc'¿Í °°Àº ¶óÀÎÀ» ¸ðµÎ `gcc -print-libgcc-file-name`·Î ¹Ù²ãÁÖ¾î¾ß ÇÑ´Ù. (ÁÖÀÇÇÒ °ÍÀº ¹Ù·Î ¹éÄõ¿ìÆ®¹®ÀÚ(`)ÀÇ »ç¿ëÀÌ´Ù. ²À ÀÌ ¹®ÀÚ¸¸À» »ç¿ëÇ϶ó.)

¶ÇÇÑ ¸ðµç /usr/lib/libgcc* È­ÀϵéÀ» »èÁ¦Ç϶ó. ÀÌ°ÍÀÌ Áß¿äÇÏ´Ù.

__NEEDS_SHRLIB_libc_4µµ ¸¶Âù°¡Áö ¹®Á¦ÀÌ´Ù.

DLL »ý¼º½Ã¿¡ ``Assertion failure'' ¸Þ½ÃÁö

ÀÌ ¸Þ½ÃÁö´Â ¿©·¯ºÐÀÌ °¡Áö°í ÀÖ´Â jump table ½½·ÔÀÌ ¿ø·¡ÀÇ jump.varsÈ­ÀÏ¿¡ ³Ê¹« ÀûÀº °ø°£ ¹Û¿¡ ¿¹¾àµÇÁö ¾Ê¾Ò±â ¶§¹®¿¡ ¿À¹öÇ÷οì·Î ÀÎÇØ »ý±â´Â ¹®Á¦ÀÌ´Ù. ¿©·¯ºÐÀº tools-2.17.tar.gz ÆÐÅ°Áö¿¡ µé¾î ÀÖ´Â `getsize' ¸í·ÉÀ» »ç¿ëÇÏ¿© ±× ¹üÀÎÀ» ã¾Æ³¾ ¼ö ÀÖ´Ù. ¾Æ¸¶µµ À¯ÀÏÇÑ ÇØ°áÃ¥Àº ¸ÞÀÌÀú ¹øÈ£ÀÇ Áõ°¡ ¹Û¿¡ ¾ø´Â °Í °°´Ù. ´ÜÁö ÀÌÀü ¹öÀü°ú ȣȯµÇµµ·Ï °í·ÁÇϸ鼭 ¸»ÀÌ´Ù.

ld: output file needs shared library libc.so.4

ÀÌ·¯ÇÑ ¹®±¸´Â º¸Åë libc°¡ ¾Æ´Ñ ¶óÀ̺귯¸®µé (Áï, X À©µµ¿ì ¶óÀ̺귯¸®µé...)ÇÏ°í ¸µÅ©ÇÏ·Á°í ÇÒ ¶§ ¹ß»ýÇÑ´Ù. -staticÀ» ÇÔ²² »ç¿ëÇÏÁö ¾Ê°í ¸µÅ© ½Ã¿¡ -g ¿É¼ÇÀ» ÁÖ¾úÀ» ¶§ÀÌ´Ù.

°øÀ¯ ¶óÀ̺귯¸®¿¡ ´ëÇÑ .sa È­ÀÏÀº º¸Åë Á¤ÀǵÇÁö _NEEDS_SHRLIB_libc_4 ¶ó´Â ½Éº¼À» °¡Áö°í Àִµ¥ ³ªÁß¿¡ libc.sa¿¡¼­ ÇØ°áµÈ´Ù. ÇÏÁö¸¸ -g ¿É¼ÇÀ» ÁÖ°Ô µÇ¸é libg.a ¶Ç´Â libc.a¿Í ¸µÅ©µÇ°Ô µÇ¹Ç·Î ±× ½Éº¼Àº ÇØ°áÀÌ µÇÁö ¾Ê°Ô µÇ°í À§¿Í °°Àº ¿¡·¯ ¸Þ¼¼Áö°¡ ¶ß°Ô µÇ´Â °ÍÀÌ´Ù.

°á·ÐÀûÀ¸·Î -g Ç÷¡±×·Î ÄÄÆÄÀÏÇÒ ¶§´Â -static À̶ó´Â ¿É¼ÇÀ» ÇÔ²² Áֱ⠹ٶõ´Ù. ¶Ç´Â -g·Î ÄÄÆÄÀÏÇÏÁö ¾ÊÀ¸¸é µÈ´Ù. ¸µÅ©ÇÒ °Í ¾øÀÌ ¿øÇÏ´Â ºÎºÐ¸¸ -g ¿É¼ÇÀ» ÁÖ°í ÄÄÆÄÀÏÇصµ ÃæºÐÇÑ µð¹ö±ë Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù.


´ÙÀ½ ÀÌÀü Â÷·Ê