22.10.04 TIL๐ŸŒฆ

์กฐ๋ฐฐยท2022๋…„ 10์›” 4์ผ
1

TIL

๋ชฉ๋ก ๋ณด๊ธฐ
10/30
post-thumbnail


์˜ค๋Š˜์€ ์•„์นจ๋ถ€ํ„ฐ ๋น„๊ฐ€ ๋งŽ์ด ์™”์ง€๋งŒ ๊ฑฐ์ง“๋ง์ฒ˜๋Ÿผ ์ ์‹ฌ์— ๋‘ฅ๊ทผ ํ•ด๊ฐ€ ๋–ด๋‹ค.
์นœํ•œ ํ˜•๋‹˜๋“ค๊ป˜์„œ ๋‚ด ์„ฑ๊ฒฉ์— ๋Œ€ํ•ด ๊ฑฑ์ •๋˜์–ด ๋Œ€ํ•œ ์ข‹์€ ๋ง์”€์„ ๋งŽ์ด ํ•ด์ฃผ์…จ๋Š”๋ฐ ์ง€๊ธˆ๊นŒ์ง€ ์‚ด์•„์˜ค๋Š” ๋‚˜๋ฅผ ๋Œ์•„๋ณด๋ฉฐ,
๋‚ด ์นœ์ ˆ์— ๋ถ€๋‹ด์„ ๋Š๊ผˆ์„ ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ ๋ฏธ์•ˆํ•จ๊ณผ ์ฃ„์ฑ…๊ฐ์ด ๋“ค์—ˆ๊ณ , ์•„์นจ์— ๋น„๊ฐ€ ๋‚ด๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ๋ฉ˜ํƒˆ์ด ํ”๋“ค๋ ธ๋‹ค.
ํ•˜์ง€๋งŒ ์งง์€ ๊ณ ๋ฏผ์„ ๋งˆ์น˜๊ณ  '๋‚˜๋Š” ๋‚ด ์นœ์ ˆ์— ๋Œ€ํ•œ ๋ฌด๊ฒŒ๊ฐ์„ ์งŠ์–ด์ง€๊ณ ,์ฑ…์ž„์ง€๊ฒ ๋‹ค.'๋ผ๋Š” ๋งˆ์Œ๊ฐ€์ง๊ณผ ํ•จ๊ป˜ ๋น„๊ฐ€ ๊ทธ์น˜๊ณ , ํ•ด๊ฐ€ ๋œจ๋Š” ๋“ฏํ•œ ๋Š๋‚Œ์„ ๋ฐ›์•˜๋‹ค.
2์‹œ๊ฐ„ ๋„˜๊ฒŒ ์ข‹์€ ๋ง์”€ํ•ด์ฃผ์‹  ํ˜•๋‹˜ ๋‘๋ถ„(๋ฒŒํฌ์„ญ,๋น›์‚ฐ), ๋Šฆ์€๋ฐค ์ด์•ผ๊ธฐํ•ด์ค€ ์†Œ์šธ๋ฉ”์ดํŠธ ์จ๋‹ˆ ์—๊ฒŒ ์ •๋ง ๊ฐ์‚ฌํ•˜๊ณ , ์‚ฌ๋ž‘ํ•ฉ๋‹ˆ๋‹ค๐Ÿซก

์ปดํ“จํ„ฐ์‹œ์Šคํ…œ

์ •๋ณด๋Š” '๋น„ํŠธ์™€ '์ปจํ…์ŠคํŠธ'๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค.

'hello, world!'๋ฅผ ์ฒ˜์Œ ์ถœ๋ ฅํ–ˆ๋˜ ๋•Œ๋ฅผ ์žŠ์ง€ ๋ชปํ•œ๋‹ค.๊ทธ ์ด์œ ๋Š” ์˜จ ์„ธ์ƒ์ด ์ฝ”๋“œ๋กœ ๋ณด์˜€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋‚ด๊ฐ€ ์ž‘์„ฑํ–ˆ๋˜ 'hello, world'๋ผ๋Š” ์ฝ”๋“œ๋Š” 0 ๋˜๋Š” 1๋กœ ํ‘œ์‹œ๋˜๋Š” ๋น„ํŠธ๋“ค์˜ ์—ฐ์†์ด๊ณ , ๋ฐ”์ดํŠธ๋ผ๋Š” 8๋น„ํŠธ ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
๊ฐ ๋ฐ”์ดํŠธ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ํ…์ŠคํŠธ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๋‚ด๊ฐ€ ์ฒ˜์Œ ์‚ฌ์šฉํ–ˆ๋˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์ธ C์–ธ์–ด๋‹ค.
#include, int void ๋“ฑ ์ž…๋ ฅํ•  ๊ฒƒ์ด ์ •๋ง ๋งŽ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ์—ˆ๊ณ , ์ง€๊ธˆ ํŒŒ์ด์ฌ์ด๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— ๋”๋”์šฑ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ–ˆ์—ˆ์ง€๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ ๋‹ค.
C ์–ธ์–ด๋Š” '์œ ๋‹‰์Šค๋ฅผ ์œ„ํ•œ' ์–ธ์–ด์ด๋‹ค.
์‹œ์Šคํ…œ ์ˆ˜์ค€ ํ”„๋กœ๊ทธ๋žจ์„ ์œ„ํ•ด ์„ ํƒ๋œ ์–ธ์–ด์ด๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค, ๊ฐ์ฒด, ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š๊ธฐ์— C++, Java์™€ ํฐ ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์€ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์— ์˜ํ•ด ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๋ณ€์—ญ๋œ๋‹ค.

๋‚ด๊ฐ€ 'hello, world!'๋ฅผ ์ž…๋ ฅํ–ˆ๋˜ 'hello.c'๋Š” ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์— ๋ฒˆ์—ญ๋˜์–ด ์ €๊ธ‰ ๊ธฐ๊ณ„์–ด ์ธ์ŠคํŠธ๋Ÿญ์…˜๋“ค๋กœ ๋ณ€ํ™˜๋œ๋‹ค.
์ด ๊ณผ์ •์„ ํฌ๊ฒŒ 4๊ฐ€์ง€ ๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋‹ค.

  1. ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„ ( 'hello.c' -> 'hello.i' )
    ์ „์ฒ˜๋ฆฌ๊ธฐ(cpp) : #๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋””๋ ‰ํ‹ฐ๋ธŒ์— ๋”ฐ๋ผ ์ˆ˜์ •ํ•œ๋‹ค.
    ์˜ˆ๋ฅผ ๋“ค์–ด #include <stdio.h> -> stdio.h ํ”„๋กœ๊ทธ๋žจ ๋ฌธ์žฅ์— ์ง์ ‘ ์‚ฝ์ž… ์ง€์‹œํ•œ๋‹ค.

  2. ์ปดํŒŒ์ผ ๋‹จ๊ณ„ ( 'hello.i' -> 'hello.s' )
    ์ปดํŒŒ์ผ๋Ÿฌ(cc1) : 'hello.i'(text)๋ฅผ 'hello.s'(text)๋กœ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฒˆ์—ญํ•œ๋‹ค.

  3. ์–ด์…ˆ๋ธ”๋ฆฌ ๋‹จ๊ณ„ ( 'hello.s' -> 'hello.o' )
    ์–ด์…ˆ๋ธ”๋Ÿฌ(as) : 'hello.s'(text)๋ฅผ ๊ธฐ๊ณ„์–ด ์ธ์ŠคํŠธ๋Ÿญ์…˜์œผ๋กœ ๋ฒˆ์—ญํ•˜๊ณ , ์žฌ๋ฐฐ์น˜ ๊ฐ€๋Šฅ ๋ชฉ์ ํ”„๋กœ๊ทธ๋žจ(Relocatable object programs)์˜ ํ˜•ํƒœ๋กœ ๋ฌถ์–ด์„œ 'hello.o'(binary)๋ผ๋Š” ๋ชฉ์ ํŒŒ์ผ์— ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ €์žฅํ•œ๋‹ค.

  4. ๋งํฌ ๋‹จ๊ณ„ ('hello.o' -> 'hello')
    ๋ง์ปคํ”„๋กœ๊ทธ๋žจ(ld) : 'printf.o' + 'hello.o' -> hello(binary) ์‹คํ–‰ ํŒŒ์ผ์ด ๋œ๋‹ค.

์˜ค๋Š˜์˜ ์ถ”์ฒœ๊ณก ๐ŸŽถ


ํ•˜ํ˜„์ƒ '๋“ฑ๋Œ€'
๋‚˜์—๊ฒŒ ์„ ๋ฌผํ•˜๋Š” ๋…ธ๋ž˜.
์˜ค๋Š˜ ์ฒ˜์Œ ๋“ค์—ˆ๋Š”๋ฐ ๋ฒŒ์จ 10๋ฒˆ์€ ๋„˜๊ฒŒ ๋“ค์€ ๊ฒƒ ๊ฐ™๋‹ค.

๋‚ด์ผ์˜ ๋‚˜์—๊ฒŒ๐Ÿฅฒ

  • git pull request๐Ÿ˜„ 7์ผ์งธ
profile
๊นƒํ—ˆ๋ธŒ๋กœ ์ด์ „ํ–ˆ์Šต๋‹ˆ๋‹ค -> https://chobae.github.io/

0๊ฐœ์˜ ๋Œ“๊ธ€