¸®´ª½º Çдç-¸®´ª½º °­Á / ¿¬Àç (go LINUX)¡» 410¹ø Á¦ ¸ñ:[°­ÁÂ01] gcc Ãʺ¸ÀÚ¸¦ À§ÇÑ °­ÀÇ-1 ¿Ã¸°ÀÌ:geoman (À̸¸¿ë ) 97/02/24 18:41 ÀÐÀ½:6555 °ü·ÃÀÚ·á ¾øÀ½ ----------------------------------------------------------------------------- ============================================================================= gcc Ãʺ¸ °­Á ============================================================================= ¼¼»ó¿¡¼­ Á¦ÀÏ ¶Ù¾î³­ C ÄÄÆÄÀÏ·¯ Áß ÇϳªÀÎ gcc ´Â ¸®´ª½º³ª ±âŸ ÀÚÀ¯ ¿î¿µÃ¼Á¦ ¿¡ ÀÖ¾î Ä¿´Ù¶õ º¸¹è°¡ ¾Æ´Ò ¼ö ¾ø½À´Ï´Ù. ¿ì¸®°¡ ¾Ë°í ÀÖ´Â À¯´Ð½º°¡ C ¾ð¾î·Î °Å ÀÇ ´Ù ¸¸µé¾îÁ³µíÀÌ ¸®´ª½ºÀÇ ¸ð±¹¾î´Â ¹Ù·Î gcc ÀÔ´Ï´Ù. »ç½Ç ¸¹Àº ºÐµéÀÌ ¸®´ª½º ÇØÄ¿(hacker), ±¸·ç(guru)ÀÇ °æÁö°¡ µÇ°í ½Í¾îÇÕ´Ï´Ù. ±×·¸°Ô µÇ±æ ¿øÇÏ½Å´Ù¸é ¸®´ª½ºÀÇ ¸ð±¹¾îÀÎ gcc ¸¦ ÀÍÈ÷½Ê½Ã¿ä. gcc ¸¦ ¾Ë¸é ¸®´ª½º ¸¦ ¾Æ´Â °ÍÀ̳ª ´Ù¸§ ¾ø½À´Ï´Ù. »ç½Ç C ¿Í À¯´Ð½º°¡ µû·Î ¶³¾îÁø °ÍÀÌ ¾Æ´Ï¶ó ¾î¶» °Ô º¸¸é ÀϽɵ¿Ã¼¶ó°í ÇÒ ¼öµµ ÀÖµíÀÌ gcc ¿Í ¸®´ª½º´Â ÀϽɵ¿Ã¼¶ó°í ºÁµµ ¹«¹æÇÕ ´Ï´Ù. C ¾ð¾î! ÀÌ´Â À¯´Ð½º¿Í ½ÉÁö¾î ¸¶ÀÌÅ©·Î¼ÒÇÁÆ® Á¦Ç°¿¡ À̸£±â±îÁö( ¾î¶² ½ÄÀ¸·Î º¯ ÁúµÇ¾úµç °£¿¡ ) ÄÄÇ»ÅÍ ¼¼»óÀÇ ``¸¸±¹ °øÅë¾î''ÀÔ´Ï´Ù. ¿©Å±îÁö ÀÌ·¯ÇÑ ¾ð¾îÀÇ ÅëÀÏÀ» ÀÌ·ï³½ °ÍÀº C ¾ð¾î ¹Û¿¡ ¾ø½À´Ï´Ù. ÄÄÇ»ÅÍ ¾ð¾îÀÇ ¿¡½ºÆä¶õÅ並 ÁöÇâÇÏ´Â ¸¹Àº ¾ð¾îµé( ÀÚ¹Ù, ƼŬ/ƼÄÉÀÌ )ÀÌ ³ª¿À°í ÀÖÀ¸³ª ÀÌ´Â µÎ°í º¼ ÀÏÀÔ´Ï´Ù. ±×¸® °í ±× ¾ð¾î¸¦ ±¸»çÇÑ´Ù ÇÒ Áö¶óµµ C ¾ð¾î´Â ¿ª½Ã³ª ``±âÃÊ ±³¾ç ¾ð¾î''ÀÔ´Ï´Ù. ¿©·¯ºÐÀº ¸®´ª½º¿¡¼­ gcc ¸¦ ÅëÇÏ¿© ±× µ¿¾È µµ½º/À©µµ ȯ°æ¿¡¼­ ¹è¿î ¾ûÅ͸® C ¾ð ¾î¸¦ ÀØÀ¸¼Å¾ß ÇÕ´Ï´Ù. °¨È÷ ¸»Çϰǵ¥ ±×°ÍÀº C ¾ð¾î°¡ ¾Æ´Õ´Ï´Ù. C ¾ð¾î´Â ¸¸±¹ °øÅë¾î¾ß ÇÔ¿¡µµ ºÒ±¸ÇÏ°í ¸î¸î ȸ»çµé, µµ½º/À©µµ¿Í °°Àº ȯ°æ¿¡¼­ º¯ÁúµÇ¾î °¢ ȯ°æ¸¶´Ù ``»õ·Î¿î ¹®¹ý''À» ¹è¿ö¾ß ÇÏ´Â ¾î󱸴Ͼø´Â »çŰ¡ ¹ú¾îÁ³½À´Ï´Ù. Åͺ¸ C ¿Í MS-C ¸¦ ¹è¿ì¸é¼­ È¥¶õµµ ¸¹¾Ò°í ±× µÚ¿¡ ³ª¿Â ³à¼®µéÀº ¿ÏÀüÈ÷ ´Ù¸¥ ³ð µéÀ̳ª ´Ù¸§ ¾ø½À´Ï´Ù. Áö±Ý ¸®´ª½º¿¡¼­ ¿©·¯ºÐÀº C ¾ð¾îÀÇ ``Á¤Åë ¼Ò¸²±Ç¹ý''À» ÀÍÈ÷½Ç ¼ö ÀÖ½À´Ï´Ù. ±âÃʰ¡ ¾øÀÌ ºñ¹ý¸¸ Àü¼ö¹Þ¾Æ º¸¾ÒÀÚ ´Ù¸¥ °÷¿¡ °¡¸é ¼ö¸¹Àº ºñ¹ýÀ» Áö´Ñ ¹«¸²°í¼ö µé¿¡°Ô ¿©Áö¾øÀÌ ±úÁö±â ¸¶·ÃÀÔ´Ï´Ù. ÇÏÁö¸¸ ¾Æ¹«¸® ±«·Î¿Íµµ óÀ½¿¡ ¹° ±æ¾î¿À´Â °Í, ¸¶´ç ¾²´Â ÀϺÎÅÍ ½ÃÀÛÇϸé öÅë°°Àº ½Åü¸¦ ´Ü·ÃÇϱ⠶§¹®¿¡ ¿Â°® ²Ç¼ö ºñ¹ý À¸·Î´Â ¿©·¯ºÐÀ» ÇìÄ¥ ¼ö ¾ø½À´Ï´Ù. ¶ÇÇÑ Á¤Åë ±Ç¹ýÀ» ¿¬¸¶ÇÑ »ç¶÷Àº ±âº»±â°¡ °® ÃçÁ® ÀÖÀ¸¹Ç·Î ´ë·Ã Áß¿¡µµ »ó´ëÀÇ ºñ¹ýÀ» ±Ý¹æ °£ÆÄÇÏ°í ½ÉÁö¾î »ó´ëÀÇ ºñ¹ý¸¶Àú ÀÚ½ÅÀÇ °ÍÀ¸·Î Çϱ⵵ ÇÕ´Ï´Ù. ^^ --------------------------------------- gcc ¿¡ ´ëÇÑ À̾߱â Çϳª --------------------------------------- gcc ´Â GNU ÇÁ·ÎÁ§Æ®¿¡ ÀÇÇØ ¸¸µé¾îÁø ÀÛǰÀÇ Çϳª·Î¼­ ±× ¸í¼ºÀº ÇÏ´ÃÀ» Â µí ÇÕ´Ï´Ù. GNU ÇÁ·ÎÁ§Æ®ÀÇ »ê¹° Áß °¡Àå ¸ÚÁø °ÍÀ» ²ÅÀ¸¶ó¸é Àú´Â ÁÖÀúÇÏÁö ¾Ê°í C ÄÄÆÄÀÏ·¯ÀÇ ÃÖ°íºÀÀÎ gcc ¸¦ Áö¸ñÇÒ °ÍÀÔ´Ï´Ù. ½ÇÁ¦·Î gcc ÀÇ ¸í¼ºÀº ¶Ù¾î³ª¸ç ¼ö¸¹Àº »ó¿ë ȸ»çµéÀÌ ½ºÆù¼­¸¦ ÇØÁÖ°í ÀÖ´Ù´Â °ÍÀ» ¾Æ½Ã´ÂÁö¿ä? ¿¹¸¦ µé¾î ³Ø½ºÆ®»ç( Áö±ÝÀº »ç¶óÁü )ÀÇ »õ·Î¿î C ¾ð¾îÀÎ ``¿ÀºêÁ§Æ¼ ºê C''´Â gcc ¸¦ °¡Á®´Ù ¸¸µç °ÍÀ̸ç FSF Ãø¿¡ ´Ù½Ã ±âÁõµÇ¾ú½À´Ï´Ù. gcc ´Â ¾ÆÁÖ °­·ÂÇÕ´Ï´Ù! ÀÌ¹Ì »ó¿ë À¯´Ð½º¿¡ ´Þ·Á¿À´Â AT&T ½ºÅ¸ÀÏ, BSD ½ºÅ¸ÀÏÀÇ C ¾ð¾î ¹®¹ýÀº ¹°·Ð ANSI C ¸¦ ±âº»À¸·Î ÇÏ¿© ¸ðµç ¹®¹ýÀ» ¼ÒÈ­ÇØ³¾ ¼ö ÀÖÀ¸¸ç Ư À¯ÀÇ ¹®¹ýµµ °¡Áö°í ÀÖ½À´Ï´Ù. ¾ÆÁÖ ±¸½Ä ÄÄÆÄÀÏ·¯, ¾ÆÁÖ ±¸½Ä ¹®¹ýµµ ¼ÒÈ­ÇØ³¾ ¼ö ÀÖ½À´Ï´Ù. ÀÌ¹Ì ¸¹Àº »ç¶÷µéÀÌ »ó¿ë À¯´Ð½º¿¡µµ gcc ¸¦ ¼³Ä¡ÇÏ¿© »ç¿ëÇÏ´Â °æ¿ì°¡ ¸¹Áö¿ä. ( ¹°·Ð ±ÝÀüÀûÀÎ ¹®Á¦°¡ ¸¹ÀÌ ÀÛ¿ë ^^ ) gcc ´Â ¸Å¿ì ´Ü¼øÇÕ´Ï´Ù. ¾î¶² Àǹ̷ΠÀÌ·± ¸»À» Çϴ°¡ Çϸé, Åͺ¸ C/º¼·£µå C ÅëÇÕȯ°æÀ̳ª À©µµ ȯ°æÀÇ ºñÁÖ¾óÇÑ È¯°æÀ» Á¦°øÇÏÁö ¾Ê´Â´Ù´Â °ÍÀÔ´Ï´Ù. -.- ±×µéÀÌ »ó´çÈ÷ ¿ÀÅä¸ÅƽÇÑ ¼º°ÝÀ» °®´Â ¹Ý¸é, gcc ´Â ¿À·ÎÁö ¼öµ¿ ½ºÆ½¹æ½ÄÀÔ´Ï´Ù. °¢°¢ÀÇ Àå´ÜÁ¡ÀÌ ÀÖÁö¸¸ ¿©·¯ºÐÀÌ ÀÏ´Ü gcc ¸¦ ¸¸³ª½Ã·Á¸é °¢¿À´Â ÇÏ°í °è¼Å¾ß ÇÕ ´Ï´Ù. µµ½º/À©µµ¿¡¼­ º¸´ø °ÍÀ» ¿øÇÏÁö ¸¶½Ê½Ã¿ä. gcc ´Â ²®µ¥±â¿¡ ½Å°æ¾µ °Ü¸¦Á¶Â÷ ¾ø½À´Ï´Ù. gcc ´Â ¿À·ÎÁö ¸í·ÉÇà ¹æ½Ä¸¸À» Á¦°ø ÇÕ´Ï´Ù. ±×¸®°í ±× ÀÚü·Î ÆÄ¿öÇ®ÇÕ´Ï´Ù. °³¹ß ¹æÇâÀº °è¼Ó ``¶Ù¾î³­ ´É·Â''ÀÌÁö °Ñ¸ð¾ç È­ÀåÀ» ¾Æ´Ò °ÍÀÔ´Ï´Ù. ( ¸¸¾à °Ñ¸ð¾çÀ» ¿øÇÏ½Å´Ù¸é ±×°ÍÀº ¿©·¯ºÐÀÇ ¸òÀÔ´Ï´Ù. xwpe °°Àº °ÍÀÌ ±× ÁÁÀº ¿¹¶ó°í ÇÒ ¼ö ÀÖ½À´Ï´Ù ) gcc ´Â ¾î¶»°Ô º¸¸é C ¾ð¾î¿¡ ´ëÇÑ °³³äÀÌ ¼­Áö ¾Ê´Â »ç¶÷¿¡°Ô´Â ¹«¸®ÀÎ C ÄÄÆÄÀÏ ·¯ÀÎ µí ÇÕ´Ï´Ù. ±âÃÊ Áö½Ä¾øÀÌ »ç¿ëÇÑ´Ù´Â °ÍÀº ºÒ°¡´É¿¡ °¡±õ½À´Ï´Ù. ÇÏÁö¸¸ C ¾ð¾î¸¦ È®½ÇÇÏ°Ô ±âÃʺÎÅÍ ¹è¿ö¼­ ¾îµð¼­µç ¾²·¯ÁöÁö ¾Ê´Â ¹«¸²°í¼ö°¡ µÇ±â À§ÇØ ¼­´Â gcc ¸¦ ±ÇÇÕ´Ï´Ù. ÀÚÀßÇÑ ¹«°øÀ» ÇÏ´Â ±øÆÐ°¡ µÇ´À³Ä? ¾Æ´Ï¸é Á¤½ÅÀ» Áö´Ñ ¹«¸²°í¼ö°¡ µÇ´À³Ä?´Â ¿©·¯ºÐÀÇ ¼±Åÿ¡ ´Þ·È½À´Ï´Ù. gcc °¡ ¾î·Æ±â¸¸ ÇѰ¡? ÇÏ¸é ±×·¸Áö´Â ¾Ê½À´Ï´Ù. gcc ´Â »ó´çÇÑ ¸Å·ÂÀ» Áö´Ï°í ÀÖ ½À´Ï´Ù. ±× ¸Å·ÂÀ¸·Î ÀÎÇØ ÇÑ ¹ø ºüÁö¸é ´Ù¸¥ ÄÄÆÄÀÏ·¯°¡ »ó´çÈ÷ ¿ì½À°Ô º¸À̱â±î Áö ÇÕ´Ï´Ù. ( ±×·¸´Ù°í ´Ù¸¥ ÄÄÆÄÀÏ·¯¸¦ ºñ¿ôÁö´Â ¸¶¼¼¿ä ^^ ±×°Å ¾²´Â »ç¶÷µéÀÌ ÀÚÁ¸½É »óÇØ¼­ ¾öû È­¸¦ ³¾ Å״ϱî¿ä. °³ÀÎÀûÀ¸·Î gcc ¿¡ ´ëÀûÇÒ ¼ö ÀÖÀ» Á¤µµ µÇ´Â ÄÄÆÄÀÏ·¯´Â ¿ÍÄÞ C ÄÄÆÄÀÏ·¯ Á¤µµ? ) gcc ¸¦ ¹è¿ì½Ã·Á¸é Á¤½Å ¹«Àå(?)ÀÌ Áß¿äÇÏ´Ù°í »ý°¢Çؼ­ ÀÌ·¸°Ô ÀåȲÇÏ°Ô À¼¾ú½À´Ï ´Ù. ½ÉÇÃÇÏ°Ô ¹è¿ì¸é¼­ ¿©·¯ºÐÀÇ ¸®´ª½º, C ÄÄÆÄÀÏ·¯¿¡ ´ëÇÑ µÎ·Á¿òÀ» Çϳª¾¿ ¾ø¾Ö °í C ¾ð¾î À§¿¡ ±º¸²ÇϽñ⠹ٶø´Ï´Ù. ÀÚ, ÀÌÁ¦´Â Àâ´ã¾øÀÌ ½ÃÀÛÇÕ´Ï´Ù. --------------------------------------- gcc ¿¡ ´ëÇÑ ±âº» ÀÌÇØ --------------------------------------- ¸í·ÉÇà »óÅ¿¡¼­ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇØº¾½Ã´Ù. ¿©·¯ºÐÀÌ »ç¿ëÇϰí ÀÖ´Â gcc ¹öÀüÀº ¾Ë¾ÆµÎ°í ½ÃÀÛÇϼž߰ÚÁÒ? [yong@redyong yong]$ gcc -v Reading specs from /usr/lib/gcc-lib/i386-linux/2.7.2.1/specs gcc version 2.7.2.1 [yong@redyong yong]$ ( À§ °ø¹éÀº º¸±â ÁÁÀ¸¶ó°í °íÀÇ·Î ¶ç¿ü½À´Ï´Ù. ) gcc -v À̶ó°í ÀÔ·ÂÇϴϱî ``Reading specs from..'' À̶ó°í ¸»Çϸ鼭 ±× °á°ú°ªÀ» ``gcc version 2.7.2.1''À̶ó°í ¸»ÇØÁÖ°í ÀÖ½À´Ï´Ù. ``Reading specs from...'' ÀÚ, ¾îµð¼­ gcc ¿¡ ´ëÇÑ Á¤º¸¸¦ Àоî¿À´ÂÁö º¾½Ã´Ù. /usr/lib/gcc-lib/i386-linux/2.7.2.1/specs gcc ¸¦ ¿©·¯ºÐÀÌ ¼Ò½º¸¦ °¡Á®´Ù ¼Õ¼ö ¼³Ä¡Çغ¸½Å ÀûÀº ¾øÀ» °ÍÀÔ´Ï´Ù. º¸ÅëÀº ¹ÙÀÌ ³Ê¸® ÆÐŰÁö·Î µÈ °ÍÀ» °¡Á®´Ù ¼³Ä¡ÇÏÁö¿ä. ³ªÁß¿¡ Á¤¸» ÈÞÀÏ¿¡ ³Ê¹« ½É½ÉÇÏ´Ù ½Í À¸¸é gcc ÀÇ ¼Ò½º¸¦ °¡Á®¿Í¼­ ÄÄÆÄÀÏÇØº¸½Ê½Ã¿ä. Âü, Àç¹ÌÀÖ´Â °æÇèÀÌ µÉ °ÍÀÔ´Ï´Ù. ÀÌ¹Ì ¿©·¯ºÐÀÌ °®°í ÀÖ´Â gcc ¸¦ °¡Áö°í »õ·Î¿î gcc ¸¦ ÄÄÆÄÀÏÇÏ¿© »ç¿ëÇÕ´Ï´Ù. C ÄÄÆÄÀÏ·¯¸¦ °¡Áö°í »õ ¹öÀüÀÇ C ÄÄÆÄÀÏ·¯¸¦ ÄÄÆÄÀÏÇÏ¿© »ç¿ëÇÑ´Ù! ÀÌ·± Àç¹ÌÀÖ´Â °æÇèÀ» ¶Ç ¾îµð¼­ ÇØº¸°Ú½À´Ï±î? gcc ÆÐŰÁö°¡ ¾î¶² °ÍÀ¸·Î ±¸¼ºµÇ¾î ÀÖ´ÂÁö... gcc °¡ Á¦´ë·Î ¼³Ä¡µÇ¾î ÀÖ´ÂÁö ¾Ë ¾Æº¸¸é ÁÁ°ÚÁÒ? ´ÙÀ½°ú °°½À´Ï´Ù. /lib/cpp --------> /usr/lib/gcc-lib/i386-linux/2.7.2.1/cpp ( ¸µÅ©ÀÓ ) /usr/bin/cc --------> gcc ( ¸µÅ©ÀÓ ) /usr/bin/gcc C ÄÄÆÄÀÏ·¯ ``front-end'' /usr/bin/protoize /usr/bin/unprotoize /usr/info/cpp.info-*.gz GNU info ½Ã½ºÅÛÀ» ÀÌ¿ëÇÏ´Â µµ¿ò¸» È­Àϵé /usr/info/gcc.info-*.gz " /usr/lib/gcc-lib ¸¶Áö¸· /usr/lib/gcc-lib µð·ºÅ丮¿¡ ¾Æ·¡¿¡ gcc ¿¡ °üÇÑ ¸ðµç ³»¿ëÀÌ ¼³Ä¡µË´Ï´Ù. º¸Åë ´ÙÀ½°ú °°Àº µð·ºÅ丮 ±¸Á¶¸¦ °¡Áý´Ï´Ù. /usr/lib/gcc-lib/<Ç÷§Æû>/< gcc ¹öÀü > º¸Åë ¿ì¸®´Â ¸®´ª½º¸¦ i386 ( ÀÎÅÚ È¯°æ )¿¡¼­ »ç¿ëÇϰí ÀÖÀ¸¹Ç·Î ´ÙÀ½°ú °°ÀÌ ³ª Ÿ³¯ °ÍÀÔ´Ï´Ù. /usr/lib/gcc-lib/i386-linux/2.7.2.1 ( i386-linux, i486-linux, i586-linux ´Â °¢±â ´Ù¸¦ ¼ö ÀÖ½À´Ï´Ù. ÇÏÁö¸¸ »ó°ü¾ø ´Â ³»¿ëÀÔ´Ï´Ù. ¹ÌÄ£ ô ÇÏ°í ´Ù¸¥ À̸§À» ºÎ¿©ÇÒ ¼öµµ ÀÖ½À´Ï´Ù. ) ±×·³ °è¼Ó ÇØ¼­ /usr/lib/gcc-lib ¹ØÀÇ ³»¿ëÀ» »ìÆìº¸ÁÒ. /usr/lib/gcc-lib/i386-linux/2.7.2.1/cc1 /usr/lib/gcc-lib/i386-linux/2.7.2.1/cpp /usr/lib/gcc-lib/i386-linux/2.7.2.1/include/*.h /usr/lib/gcc-lib/i386-linux/2.7.2.1/libgcc.a /usr/lib/gcc-lib/i386-linux/2.7.2.1/specs cc1ÀÌ ÁøÂ¥ C ÄÄÆÄÀÏ·¯ º»Ã¼ÀÔ´Ï´Ù. gcc ´Â ´ÜÁö ÀûÀýÇÏ°Ô C Àΰ¡, C++ Àΰ¡ ¾Æ´Ï¸é ¿ÀºêÁ§Æ¼ºê C Àΰ¡¸¦ °Ë»çÇϰí ÄÄÆÄÀÏ ÀÛ¾÷¸¸ÀÌ ¾Æ´Ï¶ó ``¸µÅ©''¶ó´Â ÀÛ¾÷±îÁö ÇÏ ¿©Æ° C ¾ð¾î·Î ÇÁ·Î±×·¥ ¼Ò½º¸¦ ¸¸µç ´ÙÀ½, ÇÁ·Î±×·¥ ¹ÙÀ̳ʸ®°¡ ¸¸µé¾îÁö±â ±îÁö ¸ðµç °úÁ¤À» °üÀåÇØÁÖ´Â ``Á¶Á¤ÀÚ'' ¿ªÇÒÀ» ÇÒ »ÓÀÔ´Ï´Ù. C ÄÄÆÄÀÏ·¯´Â cc1, C++ ÄÄÆÄÀÏ·¯´Â cc1plus, ¿ÀºêÁ§Æ¼ºê C ÄÄÆÄÀÏ·¯´Â cc1obj ÀÔ´Ï ´Ù. ¿©·¯ºÐÀÌ C++/¿ÀºêÁ§Æ¼ºê C ÄÄÆÄÀÏ·¯¸¦ ¼³Ä¡Çϼ̴ٸé cc1plus, cc1obj ¶ó´Â ½Ç ÇàÈ­Àϵµ ã¾Æº¸½Ç ¼ö ÀÖÀ» °Ì´Ï´Ù. cpp ´Â "ÇÁ¸® ÇÁ·Î¼¼¼­"ÀÔ´Ï´Ù. #include µîÀÇ ¹®ÀåÀ» º»°ÝÀûÀÎ cc1 ÄÄÆÄÀÏ¿¡ µé¾î °¡±â¿¡ ¾Õ¼­ ¸ÕÀú(pre) ó¸®(process)ÇØÁÖ´Â ³à¼®ÀÔ´Ï´Ù. Âü°í·Î g++ Áï C++ ÄÄÆÄÀÏ·¯( Á¤È®È÷´Â C++ ÄÄÆÄÀÏ·¯ ÇÁ·ÐÆ® ¿£µå )¿¡ ´ëÇÑ ÆÐŰÁö ´Â ´ÙÀ½°ú °°½À´Ï´Ù. /usr/bin/c++ -----------> g++ ¿¡ ´ëÇÑ ¸µÅ©¿¡ ºÒ°úÇÔ /usr/bin/g++ /usr/lib/gcc-lib/i386-linux/2.7.2.1/cc1plus ( ÁøÂ¥ C++ ÄÄÆÄÀÏ·¯ ) ¿ÀºêÁ§Æ¼ºê C ÄÄÆÄÀÏ·¯ ÆÐŰÁö´Â ´ÙÀ½°ú °°½À´Ï´Ù. /usr/lib/gcc-lib/i386-linux/2.7.2.1/cc1obj /usr/lib/gcc-lib/i386-linux/2.7.2.1/include/objc/*.h /usr/lib/gcc-lib/i386-linux/2.7.2.1/libobjc.a ±¸¼º¿ä¼Ò°¡ ¾î¶² °ÍÀÎÁö ¾Æ¼ÌÀ¸´Ï Á» µµ¿òÀÌ µÇ¼ÌÀ» °Ì´Ï´Ù. --------------------------------------- gcc »ç¿ëÇϱâ --------------------------------------- hello.c ¶ó´Â Áö±ßÁö±ßÇÑ ¼Ò½º Çϳª¸¦ ±âÁØÀ¸·Î ¼³¸íÇÕ´Ï´Ù ^^ ------------Cut here-------------------- #include int main ( void ) { (void) printf ( "Hello, Linux Girls! =)\n" ); return 0; } ------------Cut here-------------------- Âü°í·Î Á¦ÀÏ °£´ÜÇÑ ¼Ò½º´Â ´ÙÀ½°ú °°Àº °ÍÀÔ´Ï´Ù. ^^ ------------Cut here-------------------- main () {} ------------Cut here-------------------- ÄÄÆÄÀÏÀ» ÇØº¸°Ú½À´Ï´Ù! $ ´Â ÇÁ·ÒÇÁÆ®ÀÌÁö ÀÔ·ÂÇÏ´Â °ÍÀÌ ¾Æ´Ñ °Í ¾Æ½ÃÁÒ? $ gcc hello.c $ ¹«¼Ò½ÄÀÌ Èñ¼Ò½ÄÀ̶ó... gcc ÀÌ·¸°Ô ½ÇÇàÇÏ°í ³ª¼­ ¾Æ¹«·± ¸Þ½ÃÁö µµ ³ª¿ÀÁö ¾Ê°í ´ÙÀ½ ÁÙ¿¡ ÇÁ·ÒÇÁÆ®¸¸ ´Þ¶û ¶³¾îÁö¸é ±×°ÍÀÌ ¹Ù·Î ÄÄÆÄÀÏ ¼º°øÀÔ´Ï ´Ù. ¿©·¯ºÐÀº ¹«½ÉÄÚ ´ÙÀ½°ú °°ÀÌ °á°ú ÇÁ·Î±×·¥À» ½ÇÇà½ÃŰ·Á ÇÒ °ÍÀÔ´Ï´Ù. $ hello bash: hello: command not found $ ¿¹. ¶¯ÀÔ´Ï´Ù. ^^ ¿©·¯ºÐÀº ´ÙÀ½°ú °°ÀÌ ½ÇÇà½ÃÄÑ¾ß ÇÕ´Ï´Ù. $ ./a.out ¸Ç ¾ÕÀÇ µµÆ® ¹®ÀÚ(.)´Â ÇöÀç µð·ºÅ丮¸¦ ÀǹÌÇÕ´Ï´Ù. ±× ´ÙÀ½ µð·ºÅ丮 ±¸ºÐ ¹®ÀÚ ½½·¡½¬(/)¸¦ ¾²°í À¯´Ð½º C ¿¡¼­ ``¾à¼ÓÇÑ'' C ÄÄÆÄÀÏ·¯ÀÇ Ãâ·Â °á°ú ¹ÙÀ̳ʸ® È­ÀÏ ÀÎ a.out À» ½áÁÝ´Ï´Ù. ÀÌ·¯ÇÑ ½À°üÀº ¾ÆÁÖ Áß¿äÇÕ´Ï´Ù. ¿©·¯ºÐÀÌ ÇöÀç µð·ºÅ丮¿¡ ¾î¶² ½ÇÇà È­ÀÏÀ» ¸¸µé °í ³ª¼­ Å×½ºÆ®ÇÏ·Á°í ÇÑ´Ù¸é ²À ./<½ÇÇà È­Àϸí> À̶ó°í Àû¾îÁÝ´Ï´Ù. À¯´Ð½º´Â ±âº»ÀûÀ¸·Î PATH ¶ó´Â ȯ°æº¯¼ö¿¡ ÀÖ´Â µð·ºÅ丮¿¡¼­¸¸ ½ÇÇàÈ­ÀÏÀ» ãÀ» »ÓÀÔ´Ï´Ù. ¸¸¾à PATH ¶ó´Â ȯ°æº¯¼ö¿¡ ÇöÀç µð·ºÅ丮¸¦ ÀǹÌÇÏ´Â µµÆ® ¹®ÀÚ(.)°¡ µé¾îÀÖÁö ¾ÊÀ¸¸é ÇöÀç µð·ºÅ丮ÀÇ ½ÇÇàÈ­ÀÏÀº Àý´ë ½ÇÇàµÇÁö ¾Ê½À´Ï´Ù. °Ô´Ù°¡ ÇöÀç µð·ºÅ丮¸¦ PATH ȯ°æ º¯¼ö¿¡ ³Ö¾îÁØ´Ù ÇÒ Áö¶óµµ µµ½ºÃ³·³ ÇöÀç µð·º Å丮¸¦ ¸ÕÀú ã´Â´ÙµçÁö ÇÏ´Â ÀÏÀº ¾ø½À´Ï´Ù. ¿À·ÎÁö PATH ¿¡ ÁöÁ¤ÇÑ ¼ø¼­´ë·Î ¼ö ÇàÇÕ´Ï´Ù. ½ÇÇà ¹ÙÀ̳ʸ®¸íÀÌ °è¼Ó a.out À¸·Î ³ª¿À¸é Á» °ï¶õÇÏÁÒ. ¹¹ ¹°·Ð mv ¸í·ÉÀ¸·Î a.out ÀÇ À̸§À» ¹Ù²Ù¸é µÇÁö¸¸¼­µµ... =============== -o ¿É¼Ç =============== -o ¿É¼Ç( ¼Ò¹®ÀÚ o ÀÓ! )Àº Ãâ·Â(output) È­ÀϸíÀ» Á¤ÇÏ´Â ¿É¼ÇÀÔ´Ï´Ù. À§¿¡¼­ ¿ì¸® ´Â hello.c ¶ó´Â ¼Ò½º¸¦ °¡Áö°í ÀϹÝÀûÀ¸·Î hello ¶ó´Â À̸§ÀÇ ½ÇÇàÈ­ÀÏÀ» ¸¸µé°í ½Í¾îÇÒ °ÍÀÔ´Ï´Ù. $ gcc -o hello hello.c ^^^^^^^^ ( ^ ¹®ÀÚ·Î ¹ØÁÙÀ» Ä£ °ÍÀº °­Á¶Çϱâ À§Çؼ­ÀÏ »ÓÀÓ ) ¶Ç´Â ´ÙÀ½°ú °°ÀÌ ¼ø¼­¸¦ ¹Ù²ãµµ ¹«¹æÇÕ´Ï´Ù. $ gcc hello.c -o hello ^^^^^^^^ ¿ö³« À¯´Ð½º ÂÊÀº ¸í·ÉÇà ¹æ½ÄÀÌ ÀüÅëÀûÀ̰í ÁÖµÈ ¹æ½ÄÀ̶ó ¸í·ÉÇà¿¡¼­ ÇÏ´Â ÀÏÀº ¶Ù¾î³³´Ï´Ù. ´ç¿¬È÷ ½ÇÇàÀ» ÇÏ·Á¸é ./hello ¶ó°í ÇÏ¼Å¾ß ÇÕ´Ï´Ù. °á°ú´Â ´ÙÀ½Ã³·³ ³ª¿À°ÚÁö¿ä? $ ./hello Hello, Linux Girls! =) $ <ÁÖÀÇ> Á¦ÀÏ ¾ÈÁÁÀº ½À°ü Áß Çϳª°¡ ¹Ù·Î Å×½ºÆ®¿ëÀ¸·Î ¸¸µç ¼Ò½º¶ó°í ´ÙÀ½Ã³·³ ÇÏ´Â °ÍÀÔ ´Ï´Ù. $ gcc -o test test.c $ test $ ¹®Á¦¸¦ ¾Ë¾Æ³»±â À§ÇÏ¿© À§¿¡¼­ ÀÛ¼ºÇÑ hello.c ¸¦ ÄÄÆÄÀÏ/¸µÅ©Çغ¾½Ã´Ù. $ gcc -o test hello.c $ test $ ¿øÇÏ´Â ¹®ÀÚ¿­ÀÌ Ãâ·ÂµÇÁö ¾Ê¾Ò½À´Ï´Ù. -.- $ ./test Hello, Linux Girls! =) $ =============== -c ¿É¼Ç =============== ¾î¶² ÀÌÀ¯¿¡¼­µç ¿À·ÎÁö ÄÄÆÄÀÏ(compile) ÀÛ¾÷¸¸ ÇÏ°í ½ÍÀº °æ¿ì°¡ ÀÖ½À´Ï´Ù. ±×·² ¶§´Â ´ÙÀ½°ú °°ÀÌ ÇÕ´Ï´Ù. $ gcc -c hello.c $ ±× °á°ú ¸¸µé¾îÁö´Â È­ÀÏÀº ÀüÅëÀûÀ¸·Î hello.c ¿¡¼­ .c ºÎºÐÀ» ¶¼¾î³»°í .o ¸¦ ºÙÀÎ È­ÀÏÀÔ´Ï´Ù. ¿ÀºêÁ§Æ® È­ÀÏ, ¸ñÀû È­ÀÏÀ̶ó°í ÇÏÁö¿ä. hello.o ¶ó´Â È­ÀÏÀÌ ¸¸µé¾îÁý´Ï´Ù. ¿©·¯ºÐÀº C ¾ð¾î·Î Á¶±ÝÀÌ¶óµµ º¹ÀâÇÑ ÇÁ·Î±×·¥À» ¸¸µé±â ½ÃÀÛÇÏ¸é ¿©·¯ °³ÀÇ ¼Ò ½º·Î ³ª´©¾î¼­ Àüü ÇÁ·Î±×·¥À» Â¥°Ô µË´Ï´Ù. ±×·² ¶§´Â °¢ ¼Ò½º°¡ Àüü ±â´É¿¡ ±â ¿©Çϴ ƯÁ¤ ±â´ÉÀÇ ÇÔ¼öµéÀ» °¡Áö°Ô µÇ°í ¿À·ÎÁö ÇÑ ³à¼®¸¸ main ÇÔ¼ö¸¦ °¡Áý´Ï´Ù. ¸¸¾à ¾î¶² ÇÁ·Î±×·¥ÀÌ foo.c, bar.c ÀÌ·¸°Ô µÎ °³ÀÇ ¼Ò½º·Î ÀÌ·ç¾îÁ® ÀÖ´Ù°í Çսà ´Ù. ÀÌ·² ¶§´Â ´ÙÀ½°ú °°ÀÌ ÇÏ´Â °ÍÀÌ °¡´ÉÇÕ´Ï´Ù. =============== ¹æ ¹ý (1) =============== $ gcc -o baz foo.c bar.c $ ./baz =============== ¹æ ¹ý (2) =============== $ gcc -c foo.c $ gcc -c bar.c ¶Ç´Â $ gcc -c foo.c bar.c $ gcc -o baz foo.o bar.o ^^^^^^^^^^^ $ ./baz À§¿¡¼­ º¸¸é "¾Æ´Ï! C ÄÄÆÄÀÏ·¯¿¡ .c Áï ¼Ò½º È­ÀÏÀÌ ¾Æ´Ñ ¿ÀºêÁ§Æ® È­Àϵµ ¸· ½á ÁÖ³ª?"¶ó´Â »ý°¢À» ÇÏ½Ã°Ô µÉ °Ì´Ï´Ù. ±×·¸½À´Ï´Ù! ¿Ö³Ä? gcc ´Â Á¤È®È÷ ¸»Çؼ­ C ÄÄÆÄÀÏ·¯°¡ ¾Æ´Õ´Ï´Ù. gcc ¶ó´Â ½ÇÇàÈ­ ÀÏ ÀÚü´Â "C ÄÄÆÄÀÏ·¯¸¦ µ¹¸®´Â ³à¼®"ÀÔ´Ï´Ù. ´õ¿í ´õ Á¤È®È÷ ¸»Çغ¾½Ã´Ù. C ¾ð¾î´Â ±âº»ÀûÀ¸·Î µÎ °¡Áö °úÁ¤À» °ÅÃľ߸¸ ½ÇÇàÈ­ÀÏÀ» ¸¸µé¾î³À´Ï´Ù. 1) ÄÄÆÄÀÏ ( .c -------> .o ) 2) ¸µÅ© ( .o -------> ½ÇÇàÈ­ÀÏ a.out ) 1) °úÁ¤À» ½ÇÁ¦·Î ¸Ã´Â °ÍÀº cc1 À̶ó´Â ³à¼®À̰í 2) °úÁ¤À» ¸Ã´Â °ÍÀº ld ¶ó´Â ¸µÄ¿(linker)ÀÔ´Ï´Ù. gcc ´Â »ó´çÈ÷ Æí¸®ÇÑ µµ±¸·Î¼­ .c, .o µîÀÇ È­ÀÏ¸í ²¿¸®¸»À» º¸°í ÀûÀýÇÏ°Ô C ÄÄÆÄÀÏ·¯¿Í ¸µÄ¿¸¦ ºÒ·¯´Ù°¡ ¿øÇÏ´Â ½ÇÇàÈ­ÀÏÀ» ¸¸µé¾îÁÝ´Ï´Ù. gcc ´Â "ÄÄÆÄÀÏ·¯¿Í ¸µÄ¿¸¦ ºÒ·¯ÁÖ´Â ´ë¸®ÀÎ"ÀÔ´Ï´Ù. hello.c ¸¦ ±¦È÷ ¾î·Æ°Ô ÄÄÆÄÀÏ/¸µÅ©Çغ¾½Ã´Ù ^^ $ gcc -c hello.c ^^^^^^^ $ gcc -o hello hello.o ^^^^^^^ gcc °¡ ¾ó¸¶³ª ¶È¶ÈÇÑ ³ðÀÎÁö ¾Ë¾Æº¸ÁÒ. $ gcc -c hello.o ÀÌ°Ô ¹«½¼ Àǹ̰¡ ÀÖ°Ú½À´Ï±î? ^^ gcc: hello.o: linker input file unused since linking not done À§¿Í °°ÀÌ ºÒÆòÇÕ´Ï´Ù. ¸µÅ© °úÁ¤À» ¼öÇàÇÏÁö ¾ÊÀ¸¹Ç·Î ¸µÄ¿¿¡ ´ëÇÑ ÀÔ·Â È­ÀÏÀÎ hello.o ¸¦ »ç¿ëÇÏÁö ¾Ê¾Ò´Ù! --------------------------------------- ÇϷ縦 ³¡¸ÎÀ½ --------------------------------------- ¸¹Àº °ÍÀ» ±ÞÈ÷ ¹è¿ì½Ã¸é ¸Ó¸®¿¡ Å»ÀÌ ³³´Ï´Ù. ^^ ¿©·¯ºÐÀº gcc°¡ ¾î¶² ³à¼®ÀÎÁö ÀÌ¹Ì ¹ÝÀ» ¹è¿üÀ¸¹Ç·Î ¾ÕÀ¸·Î´Â ¾ÆÁÖ ½¬¿öÁú °Ì´Ï´Ù. ¿À´ÃÀº gcc ¿¡ ´ëÇÑ ±âº» °³³ä°ú -o, -c ¿É¼ÇÀ» ¹è¿î °Í¸¸À¸·Îµµ Å« ¼º°úÀÔ´Ï´Ù. ±âº»ÀûÀ¸·Î ¾Æ¼Å¾ß ÇÒ ³»¿ëÀº ¸ðµÎ ´Ù·êÅ×´Ï °ÆÁ¤ÇÏÁö ¸¶½Ê½Ã¿ä. ¾ÕÀ¸·Î´Â Àâ´ãµµ ¾ø°í °øºÎ¸¸ ÇÒ °ÍÀ̹ǷΠÁß¿ä ¿É¼Ç( ¸¹Áöµµ ¾Ê½À´Ï´Ù ^^ )À» ¸î °³ ¹è¿ì°í ±Ã±ØÀû À¯Æ¿¸®Æ¼ make ¸¦ ¹è¿ï °ÍÀÔ´Ï´Ù. ¸¶À½ÀÌ ±ÞÇϽŠºÐµéÀº ÀÌ¹Ì gcc, make »ç¿ë¹ýÀÌ ¸¹ÀÌ ¼Ò°³µÇ¾î ÀÖÀ¸¹Ç·Î Á¦ °­Àǰ¡ ¿Ã¶ó°¡±â Àü¿¡¶óµµ Àо½Ã¸é ÁÁÀ» µí ÇÕ´Ï´Ù. Âü°íÇÑ ¼­ÀûÀº ¿À·¼¸®»ç¿¡¼­ ³ª¿Â "RUNNING LINUX" (Matt Welsh, Lar Kaufman Àú) ÀÔ´Ï´Ù. ¿µ¹®À̱ä ÇÏÁö¸¸ ¸®´ª½º¿¡ °üÇÑ ÇÑ ¹ÙÀ̺íÀÔ´Ï´Ù. ÀÌ °­Á´ ¾¾´ª½º(C-nux) ¸ðÀÓÀÇ °³¼³À» ÃàÇÏÇϸ鼭 ±×µé¿¡°Ô ¹ÙÄ¡´Â ±ÛÀÔ´Ï´Ù. ÀÌ ±ÛÀº ÀοëÇϰí Àڽðí ÇÒ ¸¸ÇÑ ³»¿ëµµ ¾Æ´ÏÁö¸¸ ¸¸¾à Åë°·Î ¶È°°ÀÌ ÀοëÇÑ´Ù¸é ¾îµð¿¡ ±ÛÀ» º¹»çÇß´Ù´Â ¸ÞÀÏÀÌ¶óµµ Áֽʽÿä. ±×°Ç ¿¹ÀÇÀÔ´Ï´Ù. ³»ÀÏ ºË°Ú½À´Ï´Ù. Áñ°Å¿î ÇϷ縦 º¸³»½Ã±æ... ¡º¸®´ª½º Çдç-¸®´ª½º °­Á / ¿¬Àç (go LINUX)¡» 412¹ø Á¦ ¸ñ:[°­ÁÂ02] gcc Ãʺ¸ÀÚ¸¦ À§ÇÑ °­ÀÇ-2 ¿Ã¸°ÀÌ:geoman (À̸¸¿ë ) 97/02/26 00:42 ÀÐÀ½:4701 °ü·ÃÀÚ·á ¾øÀ½ ----------------------------------------------------------------------------- gcc ÀÇ ±âº»ÀÎ -c, -o ¿É¼Ç¿¡ ´ëÇØ¼­ Àü ½Ã°£¿¡ ¹è¿ü½À´Ï´Ù. ÀÌÁ¦ Â÷±ÙÂ÷±Ù ³ª¸ÓÁö Áß¿ä ¿É¼ÇÀ» ¹è¿ö°¡µµ·Ï ÇսôÙ. ------------------ -I ¿É¼Ç ------------------ #include ¹®Àå¿¡¼­ ÁöÁ¤ÇÑ Çì´õ È­ÀÏÀÌ µé¾îÀÖ´Â °÷À» Á¤ÇÏ´Â ¿É¼ÇÀÔ´Ï´Ù. ¾ÆÁÖ ¸¹ÀÌ »ç¿ëµÇ´Â ¿É¼Ç Áß ÇϳªÀÔ´Ï´Ù. #include #include "my_header.h" ÀÌ µÎ °¡ÁöÀÇ Â÷ÀÌÁ¡À» ¾Æ¼Å¾ß°ÚÁÒ? ÀüÀÚ( <> ¹®ÀÚ¸¦ ¾´ °æ¿ì )´Â ½Ã½ºÅÛ Ç¥ÁØ Çì´õ µð·ºÅ丮ÀÎ /usr/include ¸¦ ±âÁØ À¸·Î È­ÀÏÀ» ã¾Æ¼­ Æ÷ÇÔ½Ãŵ´Ï´Ù. Ç¥ÁØ µð·ºÅ丮ÀÌÁö¿ä. ÈÄÀÚ( "" ¹®ÀÚ¸¦ ¾´ °æ¿ì )´Â Áö±Ý ÄÄÆÄÀÏ·¯°¡ ½ÇÇàµÇ°í ÀÖ´Â ÇöÀç µð·ºÅ丮¸¦ ±â ÁØÀ¸·Î Çì´õ È­ÀÏÀ» ã½À´Ï´Ù. ÀÌ µÎ µð·ºÅ丮°¡ ¾Æ´Ñ °÷¿¡ ´ëÇØ¼­´Â ¸í½ÃÀûÀ¸·Î -I<µð·ºÅ丮> ·Î Á¤ÇØÁÝ´Ï´Ù. $ gcc -c myprog1.c -I.. $ gcc -c myprog1.c -Iinclude ù¹øÂ° ¿¹´Â Çì´õ È­ÀÏÀÌ ÇöÀç ¼Ò½º ÇÏÀ§ µð·ºÅ丮(..)¿¡ ÀÖ´Ù´Â ¶æÀÌ¸ç µÎ¹øÂ°´Â ÇöÀç µð·ºÅ丮ÀÇ include¶ó´Â µð·ºÅ丮¿¡ µé¾îÀÖ´Ù´Â ¶æÀÔ´Ï´Ù. -I ¿É¼ÇÀº ¾ó¸¶µçÁö ¿©·¯¹ø ¾µ ¼ö ÀÖÀ¸¸ç ÁÖ¾îÁø ¼ø¼­´ë·Î Çì´õ È­ÀÏÀ» °Ë»öÇÕ´Ï ´Ù. <ÁÖÀÇ> µð·ºÅ丮¸íÀº -I ¶ó´Â ¹®ÀÚ ¹Ù·Î ´ÙÀ½¿¡ ºÙ¿©¼­ ¾¹´Ï´Ù. Áï -I <µð·ºÅ丮> ¶ó´Â ½Ä ÀÌ ¾Æ´Ï¶ó -I<µð·ºÅ丮> ÀÔ´Ï´Ù. ¶ÇÇÑ À¯´Ð½º¿¡ ÀÖ¾î Ç¥ÁØ Çì´õ È­ÀÏ µð·ºÅ丮´Â /usr/include ¶ó´Â »ç½ÇÀ» ±â¾ïÇÏ ½Ã±â ¹Ù¶ø´Ï´Ù. ¶ÇÇÑ ¸®´ª½º¿¡ À־´Â Ä¿³Î ¼Ò½º°¡ ¾ÆÁÖ Áß¿äÇѵ¥ ¸®´ª½º °íÀ¯ÀÇ ±â´ÉÀ» ¾²´Â ¸®´ª½º¿ë ÇÁ·Î±×·¥ÀÇ °æ¿ì¿¡´Â /usr/include/linux, /usr/include/asm, /usr/include/scsi (ÃֽŠĿ³ÎÀÇ °æ¿ì) ¶ó´Â µð·ºÅ丮°¡ ²À ÀÖ ¾î¾ß ÇÏ¸ç °¢°¢Àº Ä¿³Î ¼Ò½ºÀÇ Çì´õ µð·ºÅ丮¿¡ ´ëÇÑ ¸µÅ©ÀÔ´Ï´Ù. µû¶ó¼­ Ä¿³Î ¼Ò ½º¸¦ ²À ¼³Ä¡ÇØµÎ¼Å¾ß ÇÕ´Ï´Ù. /usr/include/linux ---------------------> /usr/src/linux/include/linux /usr/include/asm ---------------------> /usr/src/linux/include/asm /usr/include/scsi ---------------------> /usr/src/linux/include/scsi ( À§¿¡¼­ /usr/src/linux/include/asmÀº »ç½Ç ´ëºÎºÐÀÇ °æ¿ì /usr/src/linux/include/asm-i386 À̶ó´Â µð·ºÅ丮¿¡ ´ëÇÑ ¸µÅ©ÀÔ´Ï´Ù ) °¢°¢ linux´Â ÀϹÝÀûÀÎ C Çì´õ È­ÀÏ, asmÀº °¢ ¾ÆÅ°ÅØÃĺ° ÀÇÁ¸ÀûÀÎ ¾î¼Àºí¸® Çì ´õ È­ÀÏ, ¸Ç ¸¶Áö¸·Àº SCSI ÀåÄ¡ ÇÁ·Î±×·¡¹Ö¿¡ ¾²ÀÌ´Â Çì´õ È­ÀÏÀÌ µé¾îÀÖ´Â °÷ÀÔ ´Ï´Ù. ÀϹÝÀûÀ¸·Î Ä¿³Î ¼Ò½º( ¾à 6 ¸Þ°¡ ÀÌ»óµÇ´Â ¼Ò½º )´Â /usr/src ¿¡¼­ tar, gzipÀ¸·Î Ç®¾îµÎ´Â °ÍÀÌ °ü·ÊÀÔ´Ï´Ù. ¸Ç óÀ½ ÇÁ·Î±×·¡¹ÖÀ» ÇÒ ¶§´Â ±×·¸°Ô ¸¹ÀÌ ¾²Áö´Â ¾Ê´Â ¿É¼ÇÀÌÁö¸¸ ¿©·¯ºÐÀÌ ´Ù¸¥ ¼Ò½º¸¦ °¡Á®´Ù ÄÄÆÄÀÏÇÒ ¶§ ¾ÆÁÖ ¸¹ÀÌ º¸°Ô µÇ´Â ¿É¼ÇÀ̹ǷΠÀÏ´Ü ÀÌÇØ´Â ÇÒ ¼ö ÀÖ ¾î¾ß°ÚÁÒ? ------------------------ -l ¿É¼Ç°ú -L ¿É¼Ç ------------------------ ¿É¼ÇÀ» Á¦´ë·Î ÀÌÇØÇϱ⿡ ¾Õ¼­ ``¶óÀ̺귯¸®''¶ó´Â °Í¿¡ ´ëÇÑ À̾߱⸦ ¸ÕÀú ÇÏÁö ¾ÊÀ¸¸é ¾ÈµÉ µí Çϱº¿ä. ------------------ ¶óÀ̺귯¸® ------------------ ``¶óÀ̺귯¸®(Library)''¶ó´Â °ÍÀº °³³ä»ó ¿µ¾î ´Ü¾î ±×´ë·ÎÀÔ´Ï´Ù. ¹«¾ùÀΰ¡ À¯¿ëÇÑ Áö½ÄÀ» ÇÑ °÷¿¡ ¸ð¾ÆµÐ °÷À̶ó´Â °³³äÀÌÁö¿ä. C ÇÁ·Î±×·¡¹ÖÀ» ÇÏ´Ù º¸¸é ¹Ýº¹ÀûÀ¸·Î »ç¿ëÇÏ°Ô µÇ´Â ÇÔ¼öµéÀÌ Àֱ⠸¶·ÃÀÌ°í ±×°ÍÀº ÇϳªÀÇ ÇÔ¼ö·Î ¶¼³»¾î ¾îµð¿¡¼­µç À¯¿ëÇÏ°Ô »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÕ´Ï´Ù. ÀÌ ÇÔ¼ö°¡ ±Øµµ·Î ¸¹ÀÌ »ç¿ëµÇ´Â °æ¿ì¿¡´Â ``¶óÀ̺귯¸®''¶ó´Â °ÍÀ¸ ·Î ¸¸µé¾îµÎ°í ¸Å¹ø ÄÄÆÄÀÏÇØµÑ ÇÊ¿ä¾øÀÌ °¡Á®´Ù »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÏÁö¿ä. ¶óÀ̺귯¸®¿¡ ´ëÇÑ ¾ê±â´Â ´ÙÀ½ ¹ø¿¡ ¶Ç ÇÏ°Ô µÇ°ÚÁö¸¸ ÀÏ´Ü Áö±Ý ÇÊ¿äÇÑ Áö½Ä¸¸ ½×±â·Î ÇϰڽÀ´Ï´Ù. ÀϹÝÀûÀ¸·Î °ü·Ê»ó ¶óÀ̺귯¸®´Â È­ÀÏ¸í ³¡ÀÌ .a ·Î ³¡³³´Ï´Ù. ¿©±â¼­ a ´Â Archive ¶ó´Â ÀǹÌÀÏ °ÍÀÔ´Ï´Ù. ¶óÀ̺귯¸®ÀÇ ¿¹¸¦ µé¾îº¸µµ·Ï ÇÏÁÒ. Áö±Ý /usr/lib µð·ºÅ丮¸¦ ÇÑ ¹ø ±¸°æÇغ¸½Ê½Ã¿ä. Á¤¸»·Î ¸¹Àº ¶óÀ̺귯¸®µéÀÌ ÀÖÁö¿ä. libc.a libm.a libdb.a libelf.a libfl.a libg++.a libg.a libncurses.a libreadline.a libvga.a µîµî... ÀÌ·¯ÇÑ ¶óÀ̺귯¸®´Â ¿ì¸®°¡ ÄÄÆÄÀÏ °úÁ¤À» °ÅÃļ­ ¸¸µç .o È­ÀÏÀ» ÇÑ °÷¿¡ Åëµé¾î °ü¸®ÇÏ´Â °Í¿¡ ºÒ°úÇÕ´Ï´Ù. µû¶ó¼­ archive ¸¦ ÀÇ¹Ì ÇÏ´Â .a ¶ó°í À̸§À» Áþ°Ô µÈ °ÍÀÌÁÒ. ¶óÀ̺귯¸®´Â ``µµ¼­°ü''À¸·Î ¼­ ±×³É .o ¸¦ ¹«ÀÛÀ§·Î Áý¾î³ÖÀº °ÍÀº ¾Æ´Ï°í ´ç¿¬È÷ µµ¼­°ü¿¡´Â ¼ÒÀåÇϰí Àִ å¿¡ ´ëÇÑ ¸ñ·Ï(index)À» °¡Áöµí Æ÷ÇԵǾî ÀÖ´Â .o ¿¡ ´ëÇÑ À妽º(index)¸¦ °¡Áö°í ÀÖ½À´Ï´Ù. ¶óÀ̺귯¸®´Â ´ÙÀ½°ú °°ÀÌ ±¸¼ºµÇ¾î ÀÖ´Ù°í ÇÒ ¼ö ÀÖ´Â °ÍÀÔ´Ï´Ù. ¶óÀ̺귯¸® = ¸ñÂ÷(index) + ( a.o + b.o + c.o + ... ) libc.a ¸¦ °¡Áö°í ÇÑ ¹ø ³î¾Æº¼±î¿ä? ¶óÀ̺귯¸® ¾ÆÄ«À̺긦 °ü¸®ÇÏ ´Â ar À̶ó´Â GNU À¯Æ¿¸®Æ¼¸¦ ½áº¸°Ú½À´Ï´Ù. $ cd /usr/lib $ ar t libc.a assert-perr.o assert.o setenv.o ftime.o psignal.o mkstemp.o sigint.o realpath.o cvt.o gcvt.o ctype-extn.o ctype.o <µîµî... °è¼Ó> $ ar t libc.a | grep printf iofprintf.o ioprintf.o iosprintf.o iovsprintf.o iovfprintf.o printf_fp.o vprintf.o snprintf.o vsnprintf.o asprintf.o vasprintf.o printf-prs.o reg-printf.o $ À§¿¡¼­ º¼ ¼ö ÀÖ´Ù½ÃÇÇ .o È­ÀϵéÀÌ ±× ¾È¿¡ µé¾îÀÖ½À´Ï´Ù. <ÁÖ¸ñ> À¯´Ð½º¿¡¼­ ¶óÀ̺귯¸® À̸§Àº lib ·Î ½ÃÀÛÇÕ´Ï´Ù. °£´ÜÇÏ°Ô ¶óÀ̺귯¸®¸¦ Çϳª ¸¸µé¾î¼­ »ç¿ëÇØº¸µµ·Ï ÇսôÙ. À̹ø ¿¹Á¦´Â 3 °³ÀÇ È­ÀÏ·Î ÀÌ·ç¾îÁ³½À´Ï´Ù. myfunc.h myfunc.c hello.c ù¹øÂ° myfunc.h Çì´õ È­ÀÏÀÇ ³»¿ëÀÔ´Ï´Ù. extern void say_hello ( void ); µÎ¹øÂ° myfunc.c, ½ÇÁ¦ ÇÔ¼ö Á¤ÀǺÎÀÔ´Ï´Ù. #include #include "myfunc.h" void say_hello ( void ) { printf ( "Hello, Linux guys!\n" ); } ¸¶Áö¸·À¸·Î ¸ÞÀÎ ÇÔ¼ö(main)°¡ µé¾îÀÖ´Â hello.c ÀÔ´Ï´Ù. #include "myfunc.h" int main ( void ) { say_hello (); return 0; } main ÇÔ¼ö¿¡¼­ say_hello ¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÏ°Ô µË´Ï´Ù. ÀÌ Á¤µµ¾ß ±×³É ÀÌ·¸°Ô ÇØ¹ö¸®°í ¸»ÁÒ ^^ $ gcc -o say_linux hello.c myfunc.c ÇÏÁö¸¸ ¶óÀ̺귯¸®¸¦ ¸¸µé¾îº¸°í ½ÃÇèÇØº¸·Á°í ÇÏ´Â °ÍÀ̹ǷΠÀϺη¯ ¾î·Æ°Ô ÇÑ ¹ø ÇØº¸±â·Î ÇϰڽÀ´Ï´Ù. $ gcc -c myfunc.c $ ar r libmylib.a myfunc.o $ ar s libmylib.a $ ar t libmylib.a myfunc.o $ gcc -o say_linux hello.c -lmylib ^^^^^^^^ ld: cannot open -lmylib: No such file or directory Èì... óÀ½ºÎÅÍ ¸¸¸¸Ä¡ ¾ÊÁÒ? ^^ ½ÇÆÐÇϱä ÇßÁö¸¸ ¸î °¡Áö¸¦ ÀÏ´Ü ¾Ë¾Æº¾½Ã´Ù. ------------- -l ¿É¼Ç ------------- ¸µÅ©(link)ÇÒ ¶óÀ̺귯¸®¸¦ ¸í½ÃÇØÁÖ´Â ¿É¼ÇÀÌ ¹Ù·Î -l ( ¼Ò¹®ÀÚ L ) ¿É¼ÇÀÔ´Ï´Ù. -I ¿É¼Ç°ú ¸¶Âù°¡Áö·Î ¹Ù¦ ºÙ¿©¼­ ¾¹´Ï´Ù. Àý´ë ¶¼¸é ¾ÈµË´Ï´Ù. ¿ì¸®´Â libmylib.a ¶ó´Â ¶óÀ̺귯¸®¸¦ ¸¸µé¾îµÎ¾ú½À´Ï´Ù. ±×°ÍÀ» »ç¿ëÇϱâ À§Çؼ­ ´Â -lmylib ¶ó°í Àû¾îÁÝ´Ï´Ù. ¶óÀ̺귯¸® È­ÀÏ¸í¿¡¼­ ¾î¶² ±ÛÀÚµéÀ» ¶¼³»°í ¾²´Â Áö ÁÖ¸ñÇϽʽÿä. libmylib.a ^^^^^ ¾ÕÀÇ lib ¸¦ ¶¼³»°í ¸Ç µÚ¿¡ ºÙ´Â .a ¸¦ ¶¼³À´Ï´Ù. ¸µÅ©(link)¶ó´Â °ÍÀÌ ¾î¶² °ÍÀÌ ¸ð¸£½Å´Ù¸é ´çÀå C ÇÁ·Î±×·¡¹Ö Ã¥À» ´Ù½Ã Àо½Ã ±â ¹Ù¶ø´Ï´Ù. ÀÌ ±Û¿¡¼­ ¼³¸íÇÒ ¹üÀ§´Â ¾Æ´Ñ µí ÇÕ´Ï´Ù. ------------- -L ¿É¼Ç ------------- ld ´Â À¯´Ð½º¿¡¼­ »ç¿ëµÇ´Â ¸µÄ¿(Linker)ÀÔ´Ï´Ù. C ÇÁ·Î±×·¥ ÄÄÆÄÀÏÀÇ ¸Ç ¸¶Áö¸· ´Ü°è¸¦ ¸Ã°Ô µÇÁö¿ä. À§¿¡¼­ ¿ì¸®´Â ´ÙÀ½°ú °°Àº ¿¡·¯ ¸Þ¼¼Áö¸¦ ¸¸³µ½À´Ï´Ù. ld: cannot open -lmylib: No such file or directory ÀÚ, ÀÌÁ¦ ¹è¿ö¾ß ÇÒ ¿É¼ÇÀº ``¶óÀ̺귯¸®ÀÇ À§Ä¡¸¦ Á¤ÇØÁÖ´Â'' -L ( ´ë¹®ÀÚ L ) ¿É¼ÇÀÔ´Ï´Ù. »ç¿ëÇü½ÄÀº -L<µð·ºÅ丮¸í> ÀÔ´Ï´Ù. ¸®´ª½º¿¡¼­ ¾î¶² ¶óÀ̺귯¸®¸¦ ãÀ» ¶§´Â /lib, /usr/lib, /usr/local/lib ¿Í °°Àº Á¤ÇØÁø Àå¼Ò¿¡¼­¸¸ ã°Ô µÇ¾î ÀÖ½À´Ï´Ù. ±×°ÍÀº ±ÔÄ¢ÀÌÁö¿ä. Áß¿äÇÑ »ç½ÇÀº ¾Æ¹«¸® ¿©·¯ºÐ ¶óÀ̺귯¸®¸¦ ÇöÀç ÀÛ¾÷ µð·ºÅ丮¿¡ ³õ¾ÆµÎ¾îµµ ld ´Â ±×°ÍÀ» ãÁö ¾Ê´Â´Ù´Â »ç½ÇÀÔ´Ï´Ù. ld ´õ·¯ ¶óÀ̺귯¸®°¡ ÀÖ´Â Àå¼Ò¸¦ ¾Ë·ÁÁÖ·Á ¸é ´ÙÀ½°ú °°ÀÌ -L ¿É¼ÇÀ» ºÙÀ̽ʽÿä. $ gcc -o say_linux hello.c -lmylib -L. ^^^ -L. Àº ÇöÀç µð·ºÅ丮¿¡¼­ ¶óÀ̺귯¸®¸¦ ãÀ¸¶ó´Â ¸»ÀÔ´Ï´Ù. -L ¿É¼ÇÀº ¿©·¯¹ø ÁÙ ¼ö ÀÖ½À´Ï´Ù. ¼º°øÀûÀ¸·Î ÄÄÆÄÀϵǾúÀ» °Ì´Ï´Ù. $ ./say_linux Hello, Linux guys! Áö±Ý±îÁö ¿©·¯ºÐÀº gcc ¿É¼Ç Áß µÎ¹øÂ°·Î Áß¿äÇÑ -I, -l, -L ¿É¼Ç¿¡ ´ëÇÏ¿© ¹è¿ì¼Ì ½À´Ï´Ù. ±×¸®°í ¶ÇÇÑ ¶óÀ̺귯¸® ¸¸µé±â¿¡ ´ëÇÏ¿© ¸Àº¸±â¸¦ ÇÏ¿´½À´Ï´Ù. ´ÙÀ½ ½Ã°£¿¡ ºË±â·Î ÇսôÙ. ¿À´ÃÀº Á¦°¡ ¼úÀÌ ÃëÇÑ °ü°è·Î... ^^ ´ÙÀ½Àº make °­Á¸¦ ½ÃÀÛÇÕ´Ï´Ù. ±× ÀÌÈÄ ´Ù½Ã gcc °ü·Ã »ç¿ë¹ýÀ» ´õ¿í ÀÚ¼¼È÷ ¾Ë ¾Æº¸µµ·Ï ÇϰڽÀ´Ï´Ù.