ÇöÀç »ç¿ë ÁßÀÎ gcc ÀÇ ¹öÀüÀ» ¾Ë°í ½ÍÀº °æ¿ì¿¡´Â gcc -v
¶ó°í ¼Ð ÇÁ·ÒÇÁÆ®¿¡¼
½ÇÇà½ÃÅ°¸é µÈ´Ù. ¶ÇÇÑ ÀÌ·¸°Ô ¸í·ÉÀ» ³»¸®¸é ¿©·¯ºÐÀÇ ½Ã½ºÅÛÀÌ ELF·Î ¼¼ÆõǾî
ÀÖ´ÂÁö ¾Æ´Ï¸é a.out À¸·Î µÇ¾î ÀÖ´ÂÁö È®½ÇÇÏ°Ô ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù. ÇÊÀÚÀÇ
½Ã½ºÅÛ¿¡¼´Â ´ÙÀ½°ú °°ÀÌ ³ª¿Â´Ù.
$ gcc -v
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
gcc version 2.7.2
¿©±â¼ ¾Ë¾ÆµÎ¾î¾ß ÇÒ ÇÙ½ÉÀûÀÎ ³»¿ëÀº ´ÙÀ½°ú °°´Ù.
i486
. ÀÌ´Â ¿©·¯ºÐÀÌ 486 ÇÁ·Î¼¼¼ ¿ëÀ¸·Î ÄÄÆÄÀÏµÈ gcc¸¦ »ç¿ëÇÏ°í
ÀÖ´Ù´Â ¸»ÀÌ´Ù. ÀÌ ºÎºÐÀº ´Ù¸¦ ¼ö Àִµ¥ ¾î¶² »ç¶÷Àº 386, 586 ¿¡ µû¶ó ´Ù¸¦ ¼öµµ
ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ 3 °¡Áö Ĩ¿¡¼ ÄÄÆÄÀÏµÈ °ÍµéÀº »ó°ü¾øÀÌ ¼·Î Àß ½ÇÇàµÈ´Ù.
Â÷ÀÌÁ¡À̶ó°í ÇÑ´Ù¸é 486 Äڵ尡 ¾îµð¿£°¡ ´õÇØÁüÀ¸·Î½á 486 ¿¡¼´Â ´õ¿í ´õ »¡¸®
½ÇÇàµÈ´Ù´Â Á¤µµÀÌ´Ù. 386 ¿¡¼ ½ÇÇàÇϴµ¥ ÇØ°¡ µÈ´Ù°Å³ª ÇÏÁö´Â ¾Ê´Â´Ù. ÇÏÁö¸¸
¾à°£ ¹ÙÀ̳ʸ®°¡ Ä¿Áú °ÍÀÌ´Ù.
box
. ÀÌ°Ç ÀüÇô Áß¿äÇÑ ºÎºÐÀÌ ¾Æ´Ï´Ù. ¿¹¸¦ µé¾î¼ box¶ó´Â
¸» ´ë½Å¿¡ slackware
³ª debian
µîÀÇ ´Ü¾î·Î ±³Ã¼µÉ ¼öµµ ÀÖ°í
¾Æ¿¹ ÀÌ ºÎºÐÀÌ ¾øÀ» ¼öµµ ÀÖ´Ù. º¸ÅëÀº i486-linux
ÀÌ·± ½ÄÀÏ °ÍÀÌ´Ù.
¸¸¾à gcc ¸¦ ÄÄÆÄÀÏÇؼ »ç¿ëÇÑ´Ù¸é º»ÀÎÀÌ µû·Î i486-box-linux ¶ó°í ÁöÁ¤ÇßµíÀÌ
gcc¸¦ ¸¸µé ¶§ Á¤ÇØÁÙ ¼ö ÀÖ´Ù.
linux
. ÀÌ ´Ü¾î ´ë½Å¿¡ linuxelf
¶óµç°¡
linuxaout
À̶ó´Â ´Ü¾î°¡ µé¾î°¥ ¼öµµ ÀÖ´Ù. ¶Ç´Â ¸®´ª½º Ä¿³Î ¹öÀüÀÌ
µé¾î°¡µµ·Ï ÇÒ ¼öµµ ÀÖ´Ù. ¾ÏÆ° ¸®´ª½º¿ëÀÓÀ» Àß ³ªÅ¸³»°í ÀÖ´Ù. °£´ÜÈ÷ °á·ÐÀ»
¸»ÇÏÀÚ¸é, ÀÌ ´Ü¾îÀÇ ¶æÀº »ç¿ëÁßÀÎ GCC ¹öÀü¿¡ µû¶ó ´Ù¸£°Ô Çؼ®µÈ´Ù.
linux
À̸é ELF ¸¦ ÀǹÌÇÏ°í a.outÀº
linuxaout
°ú °°Àº À̸§À» °®´Â´Ù.
linuxaout
À̶ó´Â ¸»À» ã¾Æº¼ ¼ö ¾øÀ» °ÍÀÌ´Ù.
linuxelf
¶ó´Â À̸§Àº »ç¶óÁø ¸»ÀÌ´Ù. gcc ¹öÀü 2.6.3 ½ÃÀý¿¡ ELF
½ÇÇàÈÀÏÀ» ¸¸µé±â À§Çؼ Áö¾îÁ³´ø À̸§ÀÌ´Ù. gcc 2.6.3 Àº ELF ½ÇÇàÈÀÏÀ»
¸¸µå´Âµ¥ ¹ö±×°¡ ÀÖ´Ù°í ¾Ë·ÁÁ® ÀÖ´Ù. ¾÷±×·¹À̵åÇϱ⠹ٶõ´Ù.
2.7.2
ÀÌ°ÍÀº ¹öÀü ¹øÈ£ÀÌ´Ù.µû¶ó¼ Á¾ÇÕÇغ¸¸é ÇÊÀÚ´Â Áö±Ý ELF ½ÇÇàÄڵ带 »ý¼º½ÃÅ°´Â gcc 2.7.2 ¸¦ °¡Áö°í ÀÖ´Ù´Â °ÍÀÌ´Ù.
±×³É ¾Æ¹« »ý°¢¾øÀÌ gcc ¸¦ ¼³Ä¡Ç߰ųª ¹èÆ÷ÆÇÀ» ¼³Ä¡ÇÒ ¶§ ÀÚµ¿À¸·Î ¼³Ä¡ÇÏ°Ô Çß´Ù¸é, µµ´ëü ¸®´ª½º ÈÀÏ ½Ã½ºÅÛ »ó¿¡¼ ¾îµð¿¡ À§Ä¡ÇÏ´ÂÁö ¾Ë°í ½ÍÀ» °ÍÀÌ´Ù. ´ë´äÀº ÀÌ·¸´Ù.
/usr/lib/gcc-lib/
target/
version/
(±×¸®°í ¸ðµç ÇÏÀ§ µð·ºÅ丮µé)ÀÌ ÄÄÆÄÀÏ·¯ÀÇ
´ëºÎºÐÀÌ À§Ä¡ÇÏ´Â Àå¼ÒÀÌ´Ù. ÄÄÆÄÀÏÀ» ¼öÇàÇÏ´Â ½ÇÇàÈÀÏ ±× ÀÚü¿Í gcc ¹öÀü¿¡
µû¸¥ ¶óÀ̺귯¸®¿Í Çì´õÈÀϵéÀÌ µé¾îÀÖ´Ù.
/usr/bin/gcc
´Â ÄÄÆÄÀÏ·¯ ¿îÀü»ç(Compiler Driver)¿ªÇÒÀ» ÇÑ´Ù.
Ä¿¸Çµå »ó¿¡¼´Â gcc ¶ó°í¸¸ ¸í·ÉÇÑ´Ù. ¸¸¾à ¿©·¯ ¹öÀüÀÇ ÄÄÆÄÀÏ·¯¸¦ °¡Áö°í ÀÖ´Ù¸é
¿©·¯ ¹öÀü°ú ÇÔ²² »ç¿ëÇÒ ¼ö ÀÖ´Ù. gcc °¡ »ç¿ëÇÏ°Ô µÉ µðÆúÆ® ¹öÀüÀÇ ÄÄÆÄÀÏ·¯¸¦
¾Ë¾Æ³»±â À§Çؼ´Â gcc -v
¶ó°í Çغ¸¸é µÈ´Ù. ´Ù¸¥ ¹öÀüÀ¸·Î °Á¦·Î ÄÄÆÄÀÏÇÏ°Ô
ÇÏ·Á¸é gcc -V
version ÀÌ·± ½ÄÀ¸·Î »ç¿ëÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¾î¼...
# gcc -v
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.7.2/specs
gcc version 2.7.2
# gcc -V 2.6.3 -v
Reading specs from /usr/lib/gcc-lib/i486-box-linux/2.6.3/specs
gcc driver version 2.7.2 executing gcc version 2.6.3
/usr/
target/(bin|lib|include)/
. ¿©·¯ºÐÀÌ ¿©·¯
°³ÀÇ ¸ñÇ¥ Çü½ÄÀ» °¡Áö°í ÀÖ´Ù¸é (ÀÏ´Ü ELFÀΰ¡ a.out Àΰ¡ ¶Ç´Â ¿©·¯ ÇüÅÂÀÇ Å©·Î½º
ÄÄÆÄÀÏ·¯ µî) µðÆúÆ® ¸ñÇ¥ Çü½Ä¿ëÀÌ ¾Æ´Ñ ¶óÀ̺귯¸®, ¹ÙÀ̳ʸ® À¯Æ¿¸®Æ¼ (as
, ld
µî...), Çì´õ ÈÀϵ鵵 ã¾Æº¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
¿À·ÎÁö ÇÑ Á¾·ùÀÇ gcc ¸¦ °¡Áö°í ÀÖ´Ù ÇÏ´õ¶óµµ ¸Å¿ì ¸¹Àº °ÍµéÀÌ ±× µð·ºÅ丮¿¡
±ò·ÁÀÖÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ±×·¸Áö ¾Ê´Ù¸é ¾Æ¸¶µµ
/usr/(bin|lib|include)
¿¡ ÀÖÀ» °ÍÀÌ´Ù.
/lib/
,/usr/lib
±×¸®°í ¿©Å¸ ¶óÀ̺귯¸® µð·ºÅ丮µéÀÌ
±âº» ½Ã½ºÅÛÀ» À§ÇÑ ¶óÀ̺귯¸® µð·ºÅ丮ÀÌ´Ù. ¿©·¯ºÐÀº ¶ÇÇÑ »ó´çÈ÷ ¸¹Àº
ÇÁ·Î±×·¥¿¡ ´ëÇÏ¿© /lib/cpp
¸¦ °¡Áö°í ÀÖ¾î¾ß ÇÑ´Ù. (X °¡ ½ÇÁ¦·Î ¸¹ÀÌ
»ç¿ëÇÏ°í ÀÖ´Ù.) /usr/lib/gcc-lib/
target/
version/
¿¡ ÀÖ´Â cpp ¸¦ Ä«ÇÇÇسõ´ø°¡? ¾Æ´Ï¸é ½Éº¼¸¯ ¸µÅ©¸¦ ÇØÁØ´Ù.
¿©·¯ºÐÀÌ ¼Õ¼ö /usr/local/include
¿¡ ¼³Ä¡ÇÑ °Íµé »©°í ¸®´ª½º¿¡´Â 3
°¡Áö Áß¿ä Çì´õ µð·ºÅ丮°¡ ÀÖ´Ù.
/usr/include/
¿Í ±× ÇϺΠµð·ºÅ丮µéÀº H J Lu ÀÇ libc
¹ÙÀ̳ʸ® ¹èÆ÷ÆÇ¿¡ ÀÇÇؼ Á¦°øµÈ´Ù. ¿©±â¼ º»ÀÎÀº "´ëºÎºÐ"À̶ó´Â Ç¥ÇöÀ» ½è´Âµ¥,
±× ÀÌÀ¯´Â ´Ù¸¥ ¼Ò½º (¿¹¸¦ µé¾î curses
, dbm
¶óÀ̺귯¸®)¿¡¼ ¿Â
Çì´õÈÀϵ鵵 Àֱ⠶§¹®ÀÌ´Ù. ƯÈ÷³ª ÃÖ±Ù libc ¹èÆ÷ÆÇÀ» °¡Á®¿À¸é ±×·¯ÇÑ
Çì´õÈÀϵéÀº ¾ø´Ù. (¿¹Àü¿¡´Â °°ÀÌ ´Þ·Á¼ ¿ÔÁö¸¸)
/usr/include/linux
¿Í /usr/include/asm
(<linux/*.h>
ÈÀÏ°ú
<asm/*.h>
¿¡ ÀÇÇØ
ÂüÁ¶µÇ´Â Çì´õÈÀϵéÀÌ ÀÖ´Â Àå¼Ò)´Â °¢°¢ Ä¿³Î ¼Ò½º¿¡¼ linux/include/linux
¿Í linux/include/asm
À»
°¡¸®Å°´Â ½Éº¼¸¯ ¸µÅ©¿©¾ß ÇÑ´Ù. ¹º°¡ Á¶±ÝÀÌ¶óµµ Å« ÀÛ¾÷À» ÇÏ·Á°í ÇÑ´Ù¸é
ºÐ¸íÈ÷ ¼³Ä¡ÇØ¾ß ÇÑ´Ù. Ä¿³Î ÄÄÆÄÀÏÀ» Çϱâ À§Çؼ¸¸ ÀÖ´Â °ÍÀº ¾Æ´Ï´Ù.
¶ÇÇÑ Ä¿³Î ¼Ò½º¸¦ Ç®°í ³ª¼ make config
¶ó´Â ÀÛ¾÷À» ÇØÁÖ¾î¾ß ÇÒ °ÍÀÌ´Ù.
¸¹Àº ÈÀϵéÀÌ ±× °úÁ¤À» ÅëÇؼ »ý°Ü³ª´Â <linux/autoconf.h>
¶ó´Â
ÈÀÏ¿¡ ÀÇÁ¸Çϱ⠶§¹®ÀÌ´Ù. ±×¸®°í ¾î¶² ¹öÀüÀÇ Ä¿³Î¿¡¼´Â asm
À̶ó°í ÇÏ´Â
°ÍÀÌ ½Éº¼¸¯ ¸µÅ©ÀÏ »Ó, make config
ÇÒ ¶§¸¸ »ý±â´Â °æ¿ì°¡ ÀÖ´Ù.
asm Àº º¸Åë asm-i386
À¸·Î ¸µÅ©µÇ¾î ÀÖ´Ù. ±×Àü¿¡´Â ¿À·ÎÁö ÀÎÅÚ ¸Ó½Å¿ë
Çì´õÈÀϸ¸ÀÌ ÀÖ¾ú±â ¶§¹®¿¡ asm ¸¸ÀÌ ÀÖ¾úÁö¸¸ ÀÌÁ¦´Â ¸®´ª½º°¡ ¸í½Ç»óºÎÇÏ°Ô
¸ÖƼÇ÷§Æû ¿î¿µÃ¼Á¦·Î ³ª¾Æ°¡°í Àֱ⠶§¹®ÀÌ´Ù. asm-i386
¸»°íµµ
asm-alpha
, asm-generic
, asm-m68k
, asm-mips
, asm-ppc
, asm-sparc
µîÀÇ Çì´õ ÈÀÏ µð·ºÅ丮°¡ ÀÖ´Â
°ÍÀ» ¹ß°ßÇÒ ¼ö ÀÖ´Ù.
µû¶ó¼ /usr/src/linux
¶ó°í ÇÏ´Â µð·ºÅ丮¿¡ ÀÌ¹Ì ¼Ò½º¸¦ Ç®¾î³õ¾Ò´Ù¸é...
$ cd /usr/src/linux
$ su
# make config
[answer the questions. Unless you're going to go on and build the kernel
it doesn't matter _too_ much what you say]
# cd /usr/include
# ln -s ../src/linux/include/linux .
# ln -s ../src/linux/include/asm .
<float.h>
, <limits.h>
,
<varargs.h>
, <stdarg.h>
±×¸®°í
<stddef.h>
µîÀÇ ÈÀϵéÀº ÄÄÆÄÀÏ·¯ ¹öÀü¸¶´Ù ´Ù¸¦ °ÍÀÌ´Ù. ±×¸®°í
±×µéÀº /usr/lib/gcc-lib/i486-box-linux/2.7.2/include/
¿¡ À§Ä¡ÇÏ°í ÀÖ´Ù.
¿©·¯ºÐÀÌ Áö±Ý gcc ¼Ò½º Äڵ带 °¡Áö°í ÀÖ´Ù°í »ý°¢ÇÏ°Ú´Ù. º¸ÅëÀº GCC ¿¡ ´ëÇÑ
INSTALL ÈÀÏ¿¡¼ Áö½ÃÇÏ´Â ´ë·Î µû¸£¸é µÈ´Ù. configure --target=i486-linux --host=XXX
ÀÌ·± ½ÄÀ¸·Î ÇØÁִµ¥,
XXX
´Â Ç÷§ÆûÀ» ¸»ÇÑ´Ù. ´ÙÀ½¿¡´Â make
°úÁ¤À» °ÅÄ¡¸é µÈ´Ù. ¸®´ª½º
Çì´õÈÀÏ, Ä¿³Î Çì´õÈÀÏÀÌ ÇÊ¿äÇϸç, Å©·Î½º ÄÄÆÄÀÏ·¯¿Í Å©·Î½º ¸µÄ¿¸¦ ¸¸µé±â
À§Çؼµµ ÇÊ¿äÇÏ´Ù.
ftp://tsx-11.mit.edu/pub/linux/packages/GCC/¿¡¼
±¸ÇÒ ¼ö ÀÖ´Ù.
Èì. ¼Ò½º¸¦ ¸®´ª½º¿¡¼ ÀÛ¼ºÇÑ µÚ¿¡ µµ½º¿¡¼ µ¹¾Æ°¡´Â ÇÁ·Î±×·¥À¸·Î ÄÄÆÄÀÏÇϱâ
À§Çؼ´Â emx
ÆÐÅ°Áö³ª go extender
¶ó´Â °ÍÀ» ÇÊ¿ä·Î ÇÑ´Ù.
ftp://sunsite.unc.edu/pub/Linux/devel/msdos¿¡ °¡¼ °ü·Ã ÈÀÏÀ» ã¾Æº¸±â ¹Ù¶õ´Ù.
º»ÀÎÀ¸·Î¼´Â Å×½ºÆ®Çغ» ÀûÀÌ ¾øÀ¸¸ç, ¾µ¸¸ÇÏ´Ù°í ´Ü¾ðÇϱâ´Â Èûµé´Ù.