¿©·¯ºÐÀº ¿©·¯ºÐÀÌ °®°í ÀÖ´Â ¹öÀüÀÇ gcc°¡ -v
¿É¼ÇÀ» ºÙÀÓÀ¸·Î½á ¾î¶°ÇÑ
½Éº¼À» ÀÚµ¿ÀûÀ¸·Î Á¤ÀÇÇÏ´ÂÁö ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î º»ÀÎÀÇ °ÍÀº ´ÙÀ½°ú °°´Ù.
$ echo 'main(){printf("hello world\n");}' | gcc -E -v -
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
gcc version 2.7.2
/usr/lib/gcc-lib/i486-box-linux/2.7.2/cpp -lang-c -v -undef
-D__GNUC__=2 -D__GNUC_MINOR__=7 -D__ELF__ -Dunix -Di386 -Dlinux
-D__ELF__ -D__unix__ -D__i386__ -D__linux__ -D__unix -D__i386
-D__linux -Asystem(unix) -Asystem(posix) -Acpu(i386)
-Amachine(i386) -D__i486__ -
¸¸¾à ¿©·¯ºÐÀÇ Äڵ尡 ¸®´ª½º¿¡¸¸ °ü°èµÇ´Â ÄÚµå¶ó¸é, ´ÙÀ½°ú °°ÀÌ ÇØÁÖ´Â °ÍÀÌ ÁÁ´Ù.
#ifdef __linux__
/* ... funky stuff ... */
#endif /* linux */
__linux__
¶ó´Â À̸§À» »ç¿ëÇ϶ó. linux
°¡ ¾Æ´Ï´Ù. ÈÄÀÚ°¡
Á¤ÀǵǾî ÀÖ±â´Â ÇÏÁö¸¸ POSIX ±Ô°Ý¿¡´Â ¸ÂÁö ¾Ê±â ¶§¹®ÀÌ´Ù.
ÄÄÆÄÀÏ·¯ ½ºÀ§Ä¡µé¿¡ ´ëÇÑ ¹®¼´Â gcc info ÆäÀÌÁö¸¦ º¸¸é µÈ´Ù. (¿©·¯ºÐÀÌ
Emacs¸¦ »ç¿ëÇÏ°í ÀÖ´Ù¸é C-h i
±×¸®°í ³ª¼ gcc ¿É¼ÇÀ» ¼±ÅÃÇ϶ó) ¿©·¯ºÐÀÌ
°®°í ÀÖ´Â ¹èÆ÷ÆÇÀ» ¸¸µç »ç¶÷ÀÌ gcc info ÆäÀÌÁö¸¦ ³Ö¾îÁö ¾Ê¾ÒÀ» ¼öµµ ÀÖ°í, ¶Ç´Â
¿¾ ¹öÀüÀÇ °ÍÀÌ µé¾î°¡ ÀÖÀ» ¼öµµ ÀÖ´Ù. °¡Àå ÁÁÀº ¹æ¹ýÀº
ftp://prep.ai.mit.edu/pub/gnu³ª ¶Ç´Â ¹Ì·¯ »çÀÌÆ®·Î °¡¼ gcc ¼Ò½º Äڵ带 ¹Þ¾Æ¿À´Â °ÍÀÌ´Ù.
±×¸®°í ±× ¼Ò½º ¾È¿¡¼ Ä«ÇÇÇؿ´Ù.
gcc ¿¡ ´ëÇÑ ¸ÇÆäÀÌÁö(gcc.1
)´Â ÀϹÝÀûÀ¸·Î ½Ã´ë¿¡ µÚ¶³¾îÁ® ÀÖ´Ù°í ¸»ÇÒ ¼ö
ÀÖ´Ù. ¸ÇÆäÀÌÁö¸¦ º¸·Á°í ÇÏ¸é ±×·¯ÇÑ °æ°í ¹®±¸¸¦ º¼ ¼ö ÀÖ´Ù.
gcc¸¦ »ç¿ëÇÒ ¶§, -O
n(¿©±â¼ nÀº ÀÛÀº ¾çÀÇ Á¤¼öµé, »ý·«Çصµ
µÈ´Ù)À» Ä¿¸Çµå ¶óÀÎ ¿É¼ÇÀ¸·Î ³Ö¾îÁÖ¸é Ãâ·Â Äڵ尡 ÃÖÀûȵȴÙ. ¿©±â¼ »ç¿ëµÇ´Â
n °ª Áß¿¡¼ ½ÇÁ¦ Àǹ̸¦ °®´Â °ªµéÀº gccÀÇ ¹öÀü¿¡ µû¶ó ´Ù¸¥µ¥, ÀϹÝÀûÀ¸·Î
0 (ÃÖÀûÈÇÏÁö ¾ÊÀ½)ºÎÅÍ ½ÃÀÛÇؼ 2(»ó´çÈ÷ ¸¹ÀÌ ÃÖÀûÈ), 3(¾ÆÁÖ¾ÆÁÖ ¸¹ÀÌ
ÃÖÀûÈ)±îÁö ¾²ÀδÙ.
³»ºÎÀûÀ¸·Î gcc´Â ÀÌ ¿É¼ÇÀ» -f
¿Í -m
À̶ó´Â ¿É¼Çµé·Î ¹Ù²Ù¾î¼ ó¸®ÇÏ°Ô
µÈ´Ù. -O
ÀÇ Æ¯Á¤ ·¹º§ÀÌ ¾î¶² Àǹ̸¦ °®´ÂÁö¿¡ ´ëÇؼ´Â gcc ½ÇÇà½Ã¿¡
-v
¿Í -Q
(¹®¼ÈµÇÁö ¾Ê¾ÒÀ½)Ç÷¡±×¸¦ ºÙ¿©ÁÜÀ¸·Î½á È®ÀÎÇÒ ¼ö ÀÖ´Ù.
¿¹¸¦ µé¾î -O2
´Â ´ÙÀ½°ú °°ÀÌ ³ªÅ¸³´Ù. (»ç¶÷µé¸¶´Ù ¼·Î ´Ù¸¦ ¼ö ÀÖ´Ù)
enabled: -fdefer-pop -fcse-follow-jumps -fcse-skip-blocks
-fexpensive-optimizations
-fthread-jumps -fpeephole -fforce-mem -ffunction-cse -finline
-fcaller-saves -fpcc-struct-return -frerun-cse-after-loop
-fcommon -fgnu-linker -m80387 -mhard-float -mno-soft-float
-mno-386 -m486 -mieee-fp -mfp-ret-in-387
¿©·¯ºÐÀÇ ÄÄÆÄÀÏ·¯°¡ Áö¿øÇÏ°í ÀÖ´Â ÃÖÀûÈ ·¹º§º¸´Ù Å« ¼ýÀÚ¸¦ »ç¿ëÇÑ´Ù¸é (¿¹¸¦
µé¾î -O6
), ±× ÄÄÆÄÀÏ·¯°¡ Áö¿øÇÏ´Â ÃÖÀûÀÇ ·¹º§·Î ÃÖÀûȽÃÄÑÁØ´Ù. ÀÌ·±
½ÄÀ¸·Î ÄÄÆÄÀϵǵµ·Ï ¼¼ÆõǾî ÀÖ´Â Äڵ带 ¹èÆ÷ÇÏ´Â °ÍÀº º°·Î ÁÁÀº »ý°¢Àº ¾Æ´Ñ °Í
°°´Ù. ´õ ¸¹Àº ÃÖÀûÈ ·¹º§µéÀÌ Â÷ÈÄ gcc ¹öÀü¿¡ »ý±ä´Ù¸é, À߸øÇÏ¸é ¿©·¯ºÐÀÇ ¼Ò½º
Äڵ尡 ¾û¶×ÇÏ°Ô ÄÄÆÄÀϵǴ ¼öµµ ÀÖ´Ù.
¸¸¾à ¿©·¯ºÐÀÌ Áö±Ý -O3
ÀÌ ÃÖ°í ·¹º§À̶ó´Â °¡Á¤ÇÏ¿¡¼ -O6
¸¦
»ç¿ëÇß´Ù°í Ä¡ÀÚ. ÇÏÁö¸¸ ´ÙÀ½ ¹öÀü(¿¹¸¦ µé¾î¼ 2.7.3.?)¿¡¼ -O8
±îÁö Áö¿øÇÏ°Ô µÈ´Ù¸é
-O6
´Â ÀüÇô ¾û¶×ÇÑ Àǹ̸¦ °¡Áú ¼öµµ ÀÖ´Ù.
gcc ¹öÀü 2.7.0 ºÎÅÍ 2.7.2 ±îÁöÀÇ »ç¿ëÀÚµéÀº -O2
ÃÖÀûÈ Ç÷¡±×¿¡ ¹ö±×°¡
ÀÖ´Ù´Â »ç½ÇÀ» Àß ¾Ë¾ÆµÎ±â ¹Ù¶õ´Ù. Strength ReductionÀ̶ó°í ÇÏ´Â °ÍÀÌ Á¦´ë·Î
ÀÛµ¿ÇÏÁö ¾Ê´Â´Ù. ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Â ÆÐÄ¡°¡ ÀÖ°í ´Ù½Ã gcc ¸¦ ÄÄÆÄÀÏÇؾß
ÇÒ°ÍÀÌ´Ù. ¶Ç´Â ¾ðÁ¦³ª -fno-strength-reduce
¶ó´Â ¿É¼ÇÀ» ÁÖ°í ÄÄÆÄÀÏÇϱâ
¹Ù¶õ´Ù.
-O
¿É¼ÇÀ» Á־ ÀÚµ¿ÀûÀ¸·Î ÀÛµ¿ÇÏÁö ¾Ê´Â -m
Ç÷¡±×µéÀÌ ÀÖ´Ù.
ÇÏÁö¸¸ À̵éÀº »ó´çÈ÷ À¯¿ëÇÏ´Ù. Áß¿äÇÑ °ÍÀ¸·Î´Â -m386
°ú -m486
ÀÌ ÀÖ´Ù.
ÀÌ Ç÷¡±×µéÀº gcc´õ·¯ °¢°¢ 386, 486Áß ¾î¶² °Í¿¡ ´õ ¸ÂÃç¼ ÄÄÆÄÀÏÇÒ °ÍÀÎÁö¸¦
¾Ë·ÁÁÖ´Â °ÍÀÌ´Ù. -m486À¸·Î ÄÄÆÄÀÏÇÏ¿´´Ù°í ÇÏ´õ¶óµµ 386 ¿¡¼ ½ÇÇàµÇ´Âµ¥´Â
ÁöÀå¾ø´Ù. ±×·¯´Ï °ÆÁ¤ÇÒ ÇÊ¿ä¾ø´Ù. 486 Äڵ尡 Á¶±Ý ´õ Å©Áö¸¸ 386 ¿¡¼ ´À·ÁÁö°Å³ª
ÇÏÁö´Â ¾Ê´Â´Ù.
¾ÆÁ÷±îÁö´Â -mpentium
À̳ª -m586
°ú °°Àº °ÍÀº ¾ø´Ù.
¸®´©½º(Linus)´Â 486 ÄÚµå¿ÉƼ¸¶ÀÌÁîµÈ Äڵ带 ¾òÀ¸¸é¼µµ ÆæƼ¾öÀÌ »ç¿ëÇÏÁö ¾Ê´Â
Á¤·Ä¹æ½Ä°úÀÇ Ä¿´Ù¶õ Â÷ÀÌÁ¡ÀÌ ¾ø´Â Äڵ带 ¾ò±â À§Çؼ´Â, -m486 -malign-loops=2 -malign-jumps=2 -malign-functions=2
¸¦
»ç¿ëÇÒ °ÍÀ» Á¦¾ÈÇÏ°í ÀÖ´Ù. Michael Meissner(Cygnus¿¡ ÀÖ´Â)´Â ´ÙÀ½°ú °°ÀÌ ¸»ÇÏ°í
ÀÖ´Ù.
³» À°°¨À¸·Î´Â-mno-strength-reduce
¸¦ °°ÀÌ ¾²¸é ¶ÇÇÑ x86 ¿¡¼ ´õ ºü¸¥ Äڵ带 ¾ò¾î³¾ ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù. (ÁÖÀÇ! ³ª´Â Áö±Ý strength reduction ¹ö±×¿¡ ´ëÇؼ ¸»ÇÏ°í ÀÖ´Â °ÍÀÌ ¾Æ´Ï´Ù. ±×°ÍÀº ÀüÇô ´Ù¸¥ ¹®Á¦ÀÌ´Ù) ¿Ö³ÄÇϸé x86Àº ´Ù¼Ò ·¹Áö½ºÅÍ ¼ýÀÚ°¡ Àû±â ¶§¹®ÀÌ´Ù. (±×¸®°í ´Ù¸¥ ·¹Áö½ºÅÍ¿¡ ´ëÇÏ¿© ·¹Áö½ºÅ͵éÀ» ±×·ìÀ¸·Î ¹¾î¼ spill ·¹Áö½ºÅÍ ¼ÓÀ¸·Î ó¸®ÇÏ´Â GCC ÀÇ Ã³¸®¹æ½ÄÀº ÀüÇô µµ¿òÀÌ µÇÁú ¾Ê´Â´Ù) StrengthReductionÀº ÀüÇüÀûÀ¸·Î °ö¼ÀÀ» µ¡¼ÀÀ¸·Î ±³Ã¼Çϱâ À§ÇÏ¿© ´Ù¸¥ ·¹Áö½ºÅ͵éÀ» »ç¿ëÇÏ°Ô µÈ´Ù.-fcaller-saves
¶ÇÇÑ ÀÌ·± ¹®Á¦Á¡ÀÌ ÀÖÁö ¾Ê³ª »ý°¢ÇÏ°í ÀÖ´Ù.
¶Ç ´Ù¸¥ ¿¹°¨Àº ÀÌ·¸´Ù.-fomit-frame-pointer
´Â µµ¿òÀÌ µÉ ¼öµµ ÀÖ°í, ±×·¸Áö ¾ÊÀ» ¼öµµ ÀÖ´Ù´Â °ÍÀÌ´Ù. ÇÑ ÆíÀ¸·Î´Â ¶Ç ´Ù¸¥ ·¹Áö½ºÅÍ°¡ ÇÒ´ç°¡´ÉÇÏ´Ù´Â °ÍÀ» ÀǹÌÇÒ ¼öµµ ÀÖ°í, ´Ù¸¥ ÇÑ ÆíÀ¸·Î´Â x86 ÀÌ ¿¬»êÁö½Ã(instruction)¿¡ ´ëÇÏ¿© ÀÎÄÚµùÇÏ´Â ¹æ½ÄÀ¸·Î¼, ½ºÅà »ó´ëÀû ÁÖ¼Ò°¡ ÇÁ·¹ÀÓ »ó´ëÀû ÁÖ¼Òº¸´Ùµµ ´õ ¸¹Àº °ø°£À» Â÷ÁöÇÑ´Ù´Â °ÍÀ» ÀǹÌÇϱ⵵ ÇÑ´Ù. ÀÌ·¸°Ô µÇ¸é ÇÁ·Î±×·¥¿¡ »ç¿ëµÉ ¼ö ÀÖ´Â IcacheÀÌ ¾à°£ ÁÙ¾îµç´Ù. ¶ÇÇÑ-fomit-frame-pointer
´Â ÄÄÆÄÀÏ·¯°¡ °è¼ÓÀûÀ¸·Î È£Ãâ ÈÄ¿¡µµ ½ºÅà Æ÷ÀÎÅ͸¦ Á¶Á¤ÇØ¾ß ÇÑ´Ù´Â °ÍÀ» ¶æÇÑ´Ù. µû¶ó¼ ÇÁ·¹ÀÓÀ» °®´Â °æ¿ì, ¸î ¹øÀÇ È£Ã⸸À¸·Îµµ ½ºÅÃÀÌ °¡µæ Â÷°Ô µÈ´Ù.
¸¶Áö¸· ¸»Àº ¸®´©½º ¶ÇÇÑ ¾ð±ÞÇÏ°í ÀÖ´Ù.
¸¸¾à ¿©·¯ºÐÀÌ ÃÖÀûÈµÈ È¿À²À» ¿øÇÑ´Ù¸é, ³ª¸¦ ¹ÏÁö ¸»¶ó. ½ÇÁ¦·Î Å×½ºÆ®¸¦ ÇغÁ¾ß ÇÑ´Ù. gcc ÄÄÆÄÀÏ·¯ÀÇ ¿É¼ÇÀº Á¤¸»·Î ¸¹´Ù. ±×¸®°í ¸î °³ÀÇ Æ¯Á¤ Á¶ÇÕÀÌ °¡Àå ÁÁÀº ÃÖÀûȸ¦ ÀÌ·ïÁÙ °ÍÀÌ´Ù.
Internal compiler error: cc1 got fatal signal 11
½Ã±×³Î 11¹øÀº SIGSEGV, Áï ¼¼±×¸ÕÅ×ÀÌ¼Ç À§¹Ý¿¡ ´ëÇÑ ½Ã±×³ÎÀÌ´Ù. ÀϹÝÀûÀ¸·Î ÇÁ·Î±×·¥ÀÌ Æ÷ÀÎÅ͸¦ À߸ø ½è´Ù´Â ¸»À̰ųª ÀڱⰡ ¼ÒÀ¯ÇÏ°í ÀÖÁö ¾ÊÀº ¸Þ¸ð¸®¿¡´Ù ¾²±â ÀÛ¾÷À» ÇÏ·Á°í ÇÒ ¶§ ¹ß»ýÇÑ´Ù. ±×·¡¼ ÀÌ´Â gccÀÇ ¹ö±×ÀÏ ¼öµµ ÀÖ´Ù.
ÇÏÁö¸¸ gcc´Â ´ëºÎºÐÀÇ ÀÛ¾÷¿¡¼ ¸Å¿ì ¾ÈÁ¤ÀûÀÌ°í Å×½ºÆÃÀ» ¸¹ÀÌ °ÅÄ£
¼ÒÇÁÆ®¿þ¾î¶ó´Â »ç½ÇÀ» ±â¾ïÇ϶ó. gcc´Â ¶ÇÇÑ º¹ÀâÇÑ ÀÚ·á ±¸Á¶¿Í Æ÷ÀÎÅ͸¦ ¾öû³ª°Ô
¸¹ÀÌ »ç¿ëÇÏ°í ÀÖ´Ù. °£´ÜÈ÷ ¸»ÇÏÀÚ¸é ÇöÀç±îÁö ¼ÒÇÁÆ®¿þ¾î Áß¿¡¼ °¡Àå ¶Ù¾î³ ·¥
Å×½ºÆà ÇÁ·Î±×·¥(RAM Tester)À̶ó°í ¸»ÇÒ ¼öµµ ÀÖ´Ù. ¸¸¾à ¸Å¹ø ÄÄÆÄÀÏÇÒ ¶§¸¶´Ù
¸ØÃß´Â À§Ä¡°¡ ´Ù¸£´Ù¸é ÀÌ´Â °ÅÀÇ ´ëºÎºÐ ¿©·¯ºÐ Çϵå¿þ¾îÀÇ ¹®Á¦¶ó°í ºÁµµ
µÈ´Ù. (CPU, ¸Þ¸ð¸®, ¸¶´õº¸µå³ª ij½¬) ¿©·¯ºÐÀÇ ÄÄÇ»ÅÍ°¡ ÆÄ¿ö ¿Â üŷÀ» °ÅÃļ Àß
ºÎÆõǾú°í ±×¸®°í À©µµ¿ìÁî °°Àº °Íµµ Àß µ¹¾Æ°£´Ù°í Çؼ ±×°ÍÀ» gccÀÇ ¹ö±×·Î
µ¹¸®Áö´Â ¸»¶ó. ÀÌ·¯ÇÑ »ç½ÇÀº ¹«ÀǹÌÇÏ´Ù. ±×¸®°í Ä¿³Î ÄÄÆÄÀÏÇÏ¸é¼ make
zImage
¿¡¼ ²À ¸ØÃá´Ù°í Çؼ gccÀÇ ¹ö±×¶ó°í ¸»ÇÒ ¼ö´Â ¾ø´Ù. make
zImage
´Â ¹«·Á 200°³ ÀÌ»óÀÇ ÈÀÏÀ» ÄÄÆÄÀÏÇÏ°í ÀÖ´Ù. ±×°Íº¸´Ù´Â Á» ÀÛÀº
°æ¿ì¸¦ ã¾Æº¸µµ·Ï ÇÏÀÚ.
¸¸¾à °è¼ÓÀûÀ¸·Î ¹ö±×°¡ ¶È°°ÀÌ ³ªÅ¸³ª°í Àڱ׸¶ÇÑ ÇÁ·Î±×·¥ ÄÄÆÄÀÏ¿¡¼µµ ±×·¯ÇÏ´Ù¸é, FSF¿¡´Ù°¡ ¹ö±× ¸®Æ÷Æ®¸¦ Çصµ µÇ°í, ¶Ç´Â linux-gcc ¸ÞÀϸµ ¸®½ºÆ®¿¡ ±ÛÀ» ¿Ã·Áµµ µÈ´Ù. ±×·¯±â À§Çؼ´Â ¿ì¼± gcc ¹®¼¸¦ Àо°í ¾î¶² ÀýÂ÷°¡ ÇÊ¿äÇÑÁö ¼÷ÁöÇÑ ´ÙÀ½ Çϱ⠹ٶõ´Ù.
¿äÁòÀº ¸¸¾à ±× ¼ÒÇÁÆ®¿þ¾î°¡ ¸®´ª½º·Î Æ÷ÆÃµÉ ¼ö ¾ø´Ù¸é ±× ¼ÒÇÁÆ®¿þ¾î´Â °¡Ä¡°¡ ¾ø´Â ÇÁ·Î±×·¥À̶ó°í ¸»ÇÑ´Ù. :-)
ÁøÁöÇÏ°Ô ¸»ÇÏÀÚ¸é, ÀϹÝÀûÀ¸·Î ¸®´ª½ºÀÇ 100% POSIX ȣȯ¼ºÀ» ÀÌ·ç±â À§Çؼ´Â ¾ÆÁÖ ¾à°£ÀÇ ¼öÁ¤ÀÛ¾÷¸¸ÀÌ ÇÊ¿äÇÏ´Ù. ¶ÇÇÑ ´ÜÁö make ¶ó°í¸¸ ÇÏ¸é ½ÇÇàÈÀÏÀÌ ¸¸µé¾îÁú ¼ö ÀÖµµ·Ï Çϱâ À§ÇÏ¿© ÄÚµåÀÇ ¿øÀúÀÚ¿¡°Ô ¼öÁ¤ Äڵ带 º¸³»´Â °ÍÀ̾߸»·Î °¡Ä¡ÀÖ´Â ÀÏÀÌ´Ù.
bsd_ioctl
, daemon
±×¸®°í <sgtty.h>
)¿©·¯ºÐÀº ¿©·¯ºÐÀÇ ÇÁ·Î±×·¥À» -I/usr/include/bsd
¸¦ ³Ö¾î¼ ÄÄÆÄÀÏÇÑ
ÈÄ, -lbsd
¿É¼ÇÀ» ³Ö°í ¸µÅ©ÇÒ ¼öµµ ÀÖ´Ù. (Áï Makefile ¾È¿¡¼
-I/usr/include/bsd
¸¦ CFLAGS º¯¼ö
¿¡ ³Ö°í, -lbsd
¸¦ LDFLAGS
¿¡ ³ÖÀ½À¸·Î½á)
ÀÌÁ¨ BSD ŸÀÔÀÇ ½Ã±×³Î ÇൿÀ» ¾ò¾î³»±â À§Çؼ -D__USE_BSD_SIGNAL
¸¦
µ¡ºÙÀÏ ÇÊ¿ä°¡ ¾ø´Ù. ¿Ö³ÄÇϸé -I/usr/include/bsd
¶ó°í ÇØÁÖ°í
<signal.h>
¸¦ ¼Ò½º ¾È¿¡¼ Æ÷ÇÔÇÏ¸é ¸ðµç ÀÏÀÌ Á¦´ë·Î ÀÌ·ç¾îÁø´Ù.
SIGBUS
, SIGEMT
, SIGIOT
, SIGTRAP
, SIGSYS
µî) ¸®´ª½º´Â POSIX¸¦ ÁؼöÇÏ°í ÀÖ´Ù. ÀÌ·¯ÇÑ ½Ã±×³ÎµéÀº POSIX Á¤ÀÇ ½Ã±×³ÎµéÀÌ ¾Æ´Ï´Ù. ÀÌ´Â ISO/IEC 9945-1:1990 (IEEE Std 1003.1-1990), paragraph B.3.3.1.1 ¿¡¼ ´ÙÀ½°ú °°ÀÌ ¸»ÇÏ°í ÀÖ´Â ¹ÙÀÌ´Ù.
SIGBUS, SIGEMT, SIGIOT, SIGTRAP, ±×¸®°í SIGSYS¿Í °°Àº ½Ã±×³ÎµéÀº POSIX.1À¸·ÎºÎÅÍ Á¦¿ÜµÇ¾ú´Ù. ¿Ö³ÄÇÏ¸é ±×µéÀÇ ÇൿÀº ÇÔÃàÀûÀÌ°í ¾î¶»°Ô ºÎ¸£´À³Ä¿¡ µû¶ó ´Ù¸£±â ¶§¹®¿¡ ÀûÀýÇÏ°Ô ¹üÁÖȽÃų ¼ö°¡ ¾ø´Ù. ÀÌ·¯ÇÑ ½Ã±×³ÎµéÀ» ¾ø¾Ö¹ö¸®´Â °ÍÀÌ ±Ô¾à ÁؼöÀÏ ¼öµµ ÀÖÁö¸¸, ¿Ö ±× ½Ã±×³ÎµéÀ» Á¦¿ÜÇعö·È´ÂÁö¿¡ ´ëÇؼ ¹®¼ÈÇØ¾ß ÇÑ´Ù. ±×¸®°í ±× ½Ã±×³ÎµéÀ» ¾î¶»°Ô ó¸®ÇÒ °ÍÀΰ¡¿¡ ´ëÇؼ´Â ¾Æ¹«·± °Á¦ ±ÔÁ¤µµ ¾ø´Ù.
ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Â °¡Àå °£´ÜÇÑ ¹æ¹ýÀº ÀÌ·¯ÇÑ ½Ã±×³ÎµéÀ» ¸ðµÎ
SIGUNUSED
·Î ÀçÁ¤ÀÇÇÏ´Â °ÍÀÌ´Ù. ¹Ù¸¥¹æ¹ýÀº ¹°·Ð ÀÌ·¯ÇÑ
½Ã±×³ÎÀ» ó¸®ÇÏ´Â ºÎºÐÀ» #ifdef
¹®ÀåÀ» ½á¼ ó¸®Çϵµ·Ï ÇÏ´Â °ÍÀÌ´Ù.
#ifdef SIGSYS
/* ... POSIX ±ÔÁ¤ÀÌ ¾Æ´Ñ SIGSYS Äڵ尡 ¿©±â¿¡ ¿Â´Ù .... */
#endif
GCC´Â ANSI ÄÄÆÄÀÏ·¯ÀÌ´Ù. ÇÏÁö¸¸ ¾ÆÁÖ ¸¹Àº ÄÚµåµéÀÌ ANSI°¡ ¾Æ´Ï´Ù. ÀÌ·² ¶§´Â
ÄÄÆÄÀÏ·¯ Ç÷¡±×¿¡ -traditional
À̶ó°í¸¸ ºÙ¿©ÁÖ¸é µÈ´Ù°í ÇÒ ¼ö ÀÖ´Ù.
¹°·Ð ±«·Ó°Ô ¼öÀÛ¾÷À» ÇØÁà¾ß ÇÏ´Â ºÎºÐµµ ¸¹ÀÌ ÀÖ´Ù. gcc info ÆäÀÌÁö¸¦ »ìÆ캸±â
¹Ù¶õ´Ù.
-traditional
¶ó´Â ¿É¼ÇÀº gcc °¡ ÀÌ¿ëÇÏ·Á°í ÇÏ´Â C ¾ð¾î ¹æ½ÄÀ» ¹Ù²Ù´Â °Í
¸»°íµµ ´Ù¸¥ È¿°ú¸¦ Áö´Ï°í ÀÖ´Ù. ¿¹¸¦ µé¾î ±× ¿É¼ÇÀº
-fwritable-strings
À» ÀÛµ¿½ÃÅ°´Âµ¥, ¹®ÀÚ¿ »ó¼ö¸¦ µ¥ÀÌŸ ¿µ¿ªÀ¸·Î
º¸³»´Â ¿ªÇÒÀ» ÇÑ´Ù. (ÅؽºÆ® ¿µ¿ª, Áï ±×µéÀÌ ¾µ ¼ö ¾ø´Â ¿µ¿ªÀ» ¸»ÇÑ´Ù) ÀÌ·± °æ¿ì
ÇÁ·Î±×·¥ÀÇ ¸Þ¸ð¸® »ç¿ëÈçÀû(footprint)ÀÌ Áõ°¡ÇÏ°Ô µÈ´Ù.
¸¹ÀÌ ¹ß»ýÇÏ´Â ¹®Á¦µé Áß¿¡ Çϳª°¡ ¹Ù·Î ¸î¸î ÇÔ¼öµéÀÌ ÀÌ¹Ì ¸®´ª½º Çì´õÈÀϵ鿡
¸ÅÅ©·Î·Î Á¤ÀǵǾî ÀÖ°í Àü󸮱Ⱑ ÄÚµå ³»¿¡¼ À¯»çÇÑ ÇÁ·ÎÅäŸÀÔ¿¡ ´ëÇÏ¿© ó¸®
°ÅºÎ¸¦ ÇÏ´Â °æ¿ìÀÌ´Ù. º¸Åë atoi()
¿Í atol()
ÀÎ °æ¿ì°¡ ¸¹´Ù.
sprintf()
sprintf(string, fmt, ...)
ÀÌ ¸¹Àº À¯´Ð½º ½Ã½ºÅÛ¿¡¼´Â ¹®ÀÚ¿
¿¡ ´ëÇÑ
Æ÷ÀÎÅ͸¦ ¹ÝȯÇÏ´Â ¹Ý¸é¿¡ ANSI¸¦ µû¸£´Â ¸®´ª½º´Â ¹®ÀÚ¿¿¡ »ðÀÔµÈ ¹®ÀÚÀÇ °¹¼ö¸¦
¹ÝȯÇÑ´Ù. À̴ ƯÈ÷³ª SunOS¿Í °°Àº °ÍÀ¸·ÎºÎÅÍ Æ÷ÆÃÇÏ´Â °æ¿ì¿¡ ´õ¿í ÁÖÀÇÇؾß
ÇÑ´Ù.
FD_*
°°Àº °Íµé? fcntl
°ú ±× ºñ½ÁÇÑ ³à¼®µé. µµ´ëü Á¤ÀǺκÐÀÌ ¾îµð¿¡ Àִ°¡? <sys/time.h>
¿¡ ÀÖ´Ù. ¸¸¾à fcntl
À» ÀÌ¿ëÇÏ°íÀÚ ÇÑ´Ù¸é ½ÇÁ¦
ÇÁ·ÎÅäŸÀÔÀ» À§ÇÏ¿© <unistd.h>
¶ÇÇÑ Æ÷ÇÔ½ÃÅ°°í ½ÍÀ» °ÍÀÌ´Ù.
ÀϹÝÀûÀ¸·Î ¸»ÇÏÀÚ¸é ¾î¶² ÇÔ¼ö¿¡ ´ëÇÑ ¸ÇÆäÀÌÁö¸¦ º¸¸é SYNOPSYS ºÎºÐ¿¡¼ ¾î¶²
Çì´õÈÀÏÀ» #include
ÇؾßÇÏ´ÂÁö ÀÚ¼¼È÷ ³ªÅ¸³»ÁÖ°í ÀÖÀ¸´Ï ±×°ÍÀ» Âü°íÇϱâ
¹Ù¶õ´Ù.
select()
¿¡¼ ŸÀӾƿôÀÌ °É¸®°í ÇÁ·Î±×·¥ÀÌ °è¼Ó ±â´Ù¸®±â¸¸ ÇÑ´Ù. ¿¹Àü¿¡´Â select()
¿¡ ´ëÇÑ Å¸ÀӾƿô ÆĶó¹ÌÅÍ°¡ ÀбâÀü¿ëÀ¸·Î¸¸
»ç¿ëµÇ¾ú´Ù. ±×¸®°í ±× ¶§¿¡µµ ¸ÇÆäÀÌÁö¿¡´Â ´ÙÀ½°ú °°Àº °æ°í°¡ ÀÖ¾ú´Ù.
select()´Â ¾Æ¸¶µµ ÀûÀýÇÑ °÷¿¡ ÀÖ´Â ½Ã°£°ªÀ» º¯°æÇÔÀ¸·Î½á ¸¸¾à¿¡ ±×·¯ÇÑ ÀÏÀÌ ¹ß»ýÇÑ´Ù¸é ¿ø·¡ÀÇ Å¸ÀӾƿôºÎÅÍ ³²Àº ½Ã°£À» ¹ÝȯÇØ¾ß ÇÒ °ÍÀÌ´Ù. ÇÏÁö¸¸ ÀÌ ±â´ÉÀº Â÷±â ¹öÀü¿¡¼³ª ±¸ÇöµÉ °ÍÀÌ´Ù. µû¶ó¼ ŸÀÓ ¾Æ¿ô Æ÷ÀÎÅÍ°¡ select() È£Ãâ¿¡ ÀÇÇÏ¿© ¼öÁ¤µÇÁö ¾ÊÀ» °ÍÀ̶ó°í »ý°¢ÇÏ´Â °ÍÀº ¹Ù¶÷Á÷ÇÏÁö ¸øÇÏ´Ù.
¹Ù·Î ±× ³¯ÀÌ ¿Ô´Ù! ÃÖ¼ÒÇÑ ±×°ÍÀÌ ÀÌ·ç¾îÁö°í ÀÖ´Ù. select()
È£Ãâ·ÎºÎÅÍ
µ¹¾Æ¿Ã ¶§, ŸÀӾƿô Àμö´Â µ¥ÀÌÅÍ°¡ µµÂøÇÏÁö ¾Ê´Â´Ù¸é ±â´Ù¸®·Á°í Çß´ø ÀÜ·ù
½Ã°£À¸·Î ¼¼ÆõȴÙ. ¸¸¾à ¾Æ¹« µ¥ÀÌÅ͵µ µµÂøÇÏÁö ¾Ê¾Ò¾ú´Ù¸é ÀÌ °ªÀº 0(zero)ÀÌ
µÇ¾úÀ» °ÍÀÌ´Ù. ±×¸®°í °°Àº ŸÀӾƿô ±¸Á¶Ã¼¸¦ °¡Áö°í È£ÃâÀ» ÇÏ°Ô µÇ¸é È£Ãâ Áï½Ã
µÇµ¹¾Æ¿Ã °ÍÀÌ´Ù.
ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ´Â ŸÀӾƿô °ªÀ» ¸Å¹ø select()
¸¦ È£ÃâÇÒ ¶§¸¶´Ù
°ü·Ã ±¸Á¶Ã¼¿¡ Àû¾îÁÖ¾î¾ß ÇÑ´Ù. ´ÙÀ½°ú °°Àº Äڵ尡 ÀÖ´Ù¸é,
struct timeval timeout;
timeout.tv_sec = 1; timeout.tv_usec = 0;
while (some_condition)
select(n,readfds,writefds,exceptfds,&timeout);
¾Æ·¡¿Í °°ÀÌ ¹Ù²Ùµµ·Ï Ç϶ó.
struct timeval timeout;
while (some_condition) {
timeout.tv_sec = 1; timeout.tv_usec = 0;
select(n,readfds,writefds,exceptfds,&timeout);
}
¸ðÀÚÀÍ(Mosaic)ÀÇ ¸î¸î ¹öÀüÀÌ ÇÑ ¶§ ÀÌ·¯ÇÑ ¹®Á¦·Î ¶°µé½âÇß¾ú´Ù. ȸÀüÇÏ´Â Áö±¸ ¾Ö´Ï¸ÅÀ̼ÇÀÇ ¼Óµµ°¡ ³×Æ®¿öÅ©¸¦ ÅëÇØ µé¾î¿À´Â ÀÚ·áÀÇ ¼Óµµ¿¡ ¹Ýºñ·¹ÇÏ´Â ÀÏÀÌ ¹ú¾îÁø °ÍÀÌ´Ù!
ÇÁ·Î±×·¥ÀÌ Ctrl+Z·Î ¼½ºÆæµåµÇ°í ´Ù½Ã ½ÃÀÛµÇ¾î ¹ö¸°´Ù. ¶Ç´Â ´Ù¸¥ ¶§¿¡´Â Ctrl+C¿Í °°Àº ½Ã±×³ÎÀ» ¹ß»ý½ÃÅ°°í ÀÚ½Ä ÇÁ·Î¼¼½ºµéÀ» Á×Àδ٠µîµî... "interrupted system calls" ¶Ç´Â "write: unknown error" ¶Ç´Â ±×·± °Í ºñ½ÁÇÑ ¿¡·¯¸¦ ³½´Ù.
POSIX ½Ã½ºÅÛÀº ´Ù¸¥ ±¸½Ä À¯´Ð½º üÁ¦¿¡¼º¸´Ù ¾à°£ ´õ ¸¹ÀÌ ½Ã±×³Î¿¡ ´ëÇؼ üŷÀ» ÇàÇÑ´Ù. ¸®´ª½º´Â ½Ã±×³Î Çڵ鷯µé(signal handler)À» ½ÇÇà½Ãų °ÍÀÌ´Ù.
select()
, pause()
, connect()
,
accept()
, Å͹̳Π»ó¿¡¼ÀÇ read()
, ¼ÒÄÏ, ÆÄÀÌÇÁ³ª ¶óÀÎ ÇÁ¸°ÅÍ,
FIFO¿¡ ´ëÇÑ open()
, PTY³ª ½Ã¸®¾ó ¶óÀÎ, Å͹̳ο¡ ´ëÇÑ ioctl()
, F_SETLKW
¸í·ÉÀ» ³»¸®´Â
fcntl()
, wait4()
, syslog()
, ¸ðµç TCP ¶Ç´Â NFS ÀÛ¾÷´Ù¸¥ ¿î¿µÃ¼Á¦ÀÇ °æ¿ì¿¡´Â ´ÙÀ½°ú °°Àº ½Ã½ºÅÛ È£Ãâ¿¡ ´ëÇؼµµ üũÇÒ °ÍÀÌ´Ù.
À§¿¡¼ ¸»ÇÑ °Í ÀÌ¿Ü¿¡µµ ´ÙÀ½°ú °°Àº ½Ã½ºÅÛ È£Ãâµé:
creat()
, close()
, getmsg()
, putmsg()
,
msgrcv()
, msgsnd()
, recv()
, send()
,
wait()
, waitpid()
, wait3()
, tcdrain()
,
sigpause()
, semop()
¸¸¾à ½Ã±×³Î(ÇÁ·Î±×·¥¿¡¼ Çڵ鷯¸¦ ÀνºÅçÇÑ °æ¿ì)ÀÌ ½Ã½ºÅÛ È£Ãâ Áß¿¡
¹ß»ýÇÑ´Ù¸é, ±×¿¡ ´ëÇÑ Çڵ鷯°¡ È£ÃâµÈ´Ù. ±×¸®°í Çڵ鷯°¡ ¹ÝȯµÇ¸é (½Ã½ºÅÛ
È£Ãâ·Î), ½Ã½ºÅÛ È£ÃâÀº Áß°£¿¡ °¡·Îä±â¸¦ ´çÇß´ÂÁö »ìÆ캸°í Áï½Ã -1 °ªÀ» °¡Áö°í
¹ÝȯµÈ´Ù. ±×¸®°íerrno ¸¦ EINTR ·Î ¼¼ÆÃÇÑ´Ù.
ÇÁ·Î±×·¥Àº ±×·¯ÇÑ ÀÏÀÌ
ÀÖÀ» °ÍÀ̶ó°í ¿¹»óÇÏÁö ¸øÇÏ°í Á×´Â °ÍÀÌ´Ù.
¿©·¯ºÐÀº ´ÙÀ½ 2 °¡Áö ÇØ°áÃ¥ Áß¿¡ Çϳª¸¦ °í¸£¸é µÈ´Ù.
(1) ¿©·¯ºÐÀÌ ¼³Ä¡ÇÑ ¸ðµç ½Ã±×³Î Çڵ鷯¿¡ ´ëÇÏ¿© SA_RESTART
¸¦ sigaction
Ç÷¡±×¿¡ ÷°¡ÇÑ´Ù. ´ÙÀ½°ú °°Àº °ÍÀÌ ÀÖ´Ù¸é,
signal (sig_nr, my_signal_handler);
¸¦ ´ÙÀ½°ú °°ÀÌ ¹Ù²Û´Ù.
signal (sig_nr, my_signal_handler);
{ struct sigaction sa;
sigaction (sig_nr, (struct sigaction *)0, &sa);
#ifdef SA_RESTART
sa.sa_flags |= SA_RESTART;
#endif
#ifdef SA_INTERRUPT
sa.sa_flags &= ~ SA_INTERRUPT;
#endif
sigaction (sig_nr, &sa, (struct sigaction *)0);
}
ÀÌ ¹æ¹ýÀÌ ´ëºÎºÐÀÇ ½Ã½ºÅÛ È£Ãâ¿¡ Àû¿ëµÇ±â´Â ÇÏÁö¸¸, read()
, write()
, ioctl()
, select()
, pause()
,
connect()
¿¡ ´ëÇؼ´Â ¿©·¯ºÐ ½º½º·Î EINTR
¸¦ üũÇØÁÖ¾î¾ß ÇÑ´Ù. ´ÙÀ½À»
»ìÆ캸ÀÚ.
(2) ¿©·¯ºÐÀÌ Á÷Á¢ ¸í½ÃÀûÀ¸·Î EINTR
À» üũÇØÁØ´Ù.
read()
¸¦ »ç¿ëÇÏ´Â Äڵ尡 ¿ø·¡ ÀÌ·¸°Ô µÇ¾î ÀÖ´Ù°í Ä¡ÀÚ.
int result;
while (len > 0) {
result = read(fd,buffer,len);
if (result < 0) break;
buffer += result; len -= result;
}
ÀÌ Äڵ带 ´ÙÀ½°ú °°ÀÌ ¹Ù²Ù¾îÁÖ¸é µÈ´Ù.
int result;
while (len > 0) {
result = read(fd,buffer,len);
if (result < 0) { if (errno != EINTR) break; }
else { buffer += result; len -= result; }
}
À̹ø¿¡ ÀÌ·± Äڵ尡 ÀÖ´Ù¸é,
int result;
result = ioctl(fd,cmd,addr);
±×°ÍÀº ¶ÇÇÑ ´ÙÀ½°ú °°ÀÌ ¹Ù²î¾î¾ß ÇÑ´Ù.
int result;
do { result = ioctl(fd,cmd,addr); }
while ((result == -1) && (errno == EINTR));
BSD À¯´Ð½ºÀÇ ¸î¸î ¹öÀü¿¡¼´Â ½Ã½ºÅÛ È£ÃâÀ» Àç°³ÇÏ´Â °ÍÀÌ ±âº» ÇൿÀ¸·Î µÇ¾î
ÀÖ´Â °æ¿ìµµ ÀÖÀ¸¹Ç·Î ÁÖÀÇÇÏÀÚ. ½Ã½ºÅÛ È£ÃâÀÌ °¡·Îä±â¸¦ Çã¿ëÇϱâ À§Çؼ´Â
SV_INTERRUPT
¶Ç´Â SA_INTERRUPT
Ç÷¡±×¸¦ »ç¿ëÇϵµ·Ï ÇÏÀÚ.
GCC´Â gcc¸¦ »ç¿ëÇÏ´Â »ç¶÷µéÀÌ ¹®ÀÚ¿ »ó¼ö¿¡ ´ëÇÏ¿© Á¤È®È÷ »ó¼ö·Î¼ °è¼Ó »ç¿ëÇÒ °ÍÀ̶ó°í ³«°üÇÏ°í ÀÖ´Â µí ÇÏ´Ù. µû¶ó¼ ±× ¹®ÀÚ¿ »ó¼ö¸¦ ÇÁ·Î±×·¥ÀÇ ÅؽºÆ® ¿µ¿ª¿¡ Áý¾î³Ö´Â´Ù. ÀÌ·¸°Ô ÇÔÀ¸·Î½á ½º¿Ò ¿µ¿ªÀ» »ç¿ëÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó ÇÁ·Î±×·¥ÀÇ µð½ºÅ© À̹ÌÁö·ÎºÎÅÍ ÆäÀÌÁö ÀÎ & ¾Æ¿ôÀ» ÇàÇÒ ¼ö ÀÖµµ·Ï ÇØÁØ´Ù. ±×·¯¹Ç·Î ¹®ÀÚ¿ »ó¼ö¿¡ ´ëÇÏ¿© ´Ù½Ã ¾²±â ÀÛ¾÷À» ÇÏ°Ô µÇ¸é ¼¼±×¸àÅ×ÀÌ¼Ç ÆúÆ®¸¦ ÀÏÀ¸Å°°Ô µÇ´Â °ÍÀÌ´Ù.
¿¹¸¦ µé¾î¼ ¹®ÀÚ¿ »ó¼ö¸¦ Àμö·Î ÇÏ¿© mktemp()
¸¦ È£ÃâÇÏ´Â ¿¾³¯
ÇÁ·Î±×·¥µé¿¡¼´Â ¹®Á¦°¡ ¹ß»ýÇÒ °ÍÀÌ´Ù. mktemp()
´Â ÁÖ¾îÁø Àμö¿¡ ´Ù½Ã
¾²·Á°í Çϱ⠶§¹®ÀÌ´Ù.
ÀÌ ¹®Á¦¸¦ °íÄ¡±â À§Çؼ´Â (a) -fwritable-strings
À̶ó´Â ¿É¼ÇÀ» ÁÖ¾î¼
ÄÄÆÄÀÏÇÑ´Ù. ÀÌ·¸°Ô ÇØÁÖ¸é gcc´Â ¹®ÀÚ¿ »ó¼ö¸¦ µ¥ÀÌŸ ¿µ¿ª¿¡ ³Ö°Ô µÈ´Ù. ¶Ç´Â (b)
¹®Á¦°¡ µÇ´Â ºÎºÐÀ» ¼öÁ¤Çؼ »ó¼ö°¡ ¾Æ´Ï¶ó º¯¼ö·Î ÁÖ¾îÁö°Ô ¸¸µé°í È£Ãâ Àü¿¡
strcpy ¸¦ »ç¿ëÇÏ¿© µ¥ÀÌÅ͸¦ ±×°÷À¸·Î Ä«ÇÇÇØÁØ´Ù.
execl()
È£ÃâÀÌ ½ÇÆÐÇϴ°¡? ¿øÀÎÀº °£´ÜÇÏ´Ù. Á¦´ë·Î È£ÃâÀ» ÇÏÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. execl
¿¡ ´ëÇÑ
ù¹ø° Àμö´Â ½ÇÇàÇÏ°íÀÚ ÇÏ´Â ÇÁ·Î±×·¥ÀÌ´Ù. ±×¸®°í µÎ¹ø°ºÎÅʹ ȣÃâÇÏ´Â
ÇÁ·Î±×·¥¿¡ Àü´ÞÇÒ argv
¹è¿ÀÌ´Ù. ±â¾ïÇ϶ó! argv[0]
´Â ÀüÅëÀûÀ¸·Î ¾Æ¹«·±
Àμö ¾øÀÌ ½ÇÇàµÇ´õ¶óµµ ¼¼ÆÃÀÌ µÈ´Ù´Â »ç½ÇÀ»! µû¶ó¼ ´ÙÀ½°ú °°ÀÌ Äڵ带
½á¾ßÇÑ´Ù.
execl("/bin/ls","ls",NULL);
Àý´ë·Î ´ÙÀ½°ú °°ÀÌ ¾²¸é ¾ÈµÈ´Ù.
execl("/bin/ls", NULL);
¾Æ¹«·± Àü´ÞÀμö ¾øÀÌ ½ÇÇà½ÃÅ°´Â °æ¿ì¿¡µµ ½ÇÇàÇü½ÄÀº ÀÚ½ÅÀÇ µ¿Àû ¶óÀ̺귯¸® ÀÇÁ¸¼ºÀ» ³ªÅ¸³¾ ¼ö ÀÖ´Â ¹æ½ÄÀ¸·Î ±¸¹®À» ¸ÂÃçÁØ ÇüŶó¾ß ÇÑ´Ù. ÃÖ¼ÒÇѵµ a.outÀÇ °æ¿ì´Â ±×·¯ÇÏ´Ù. ELF´Â Á» ´Ù¸¥ ¹æ½ÄÀ¸·Î ÀÛµ¿ÇÑ´Ù.
(¸¸¾à ÀÌ·¯ÇÑ ¶óÀ̺귯¸® Á¤º¸¸¦ ¿øÇÑ´Ù¸é ¾ÆÁÖ °£´ÜÇÑ ÀÎÅÍÆäÀ̽º°¡ ÀÖ´Ù. µ¿Àû
·ÎµùDynamic Loading¿¡ ´ëÇÑ ¼½¼ÇÀ» º¸°Å³ª ldd
¿¡ ´ëÇÑ ¸ÇÆäÀÌÁö¸¦ Âü°íÇ϶ó)