GCC (GNU Compiler Collection) - sihyun10/data_structures_docker GitHub Wiki

GCC (GNU Compiler Collection) = GNU ์ปดํŒŒ์ผ๋Ÿฌ ๋ชจ์Œ

  • GNU๋ž€? GNU's not Unix์˜ ์•ฝ์ž.
    • ๋ฆฌ์ฒ˜๋“œ ์Šคํ†จ๋จผ์ด ๊ฐ์ข… ์ž์œ  ์†Œํ”„ํŠธ์›จ์–ด๋“ค์ด ๋Œ์•„๊ฐ€๊ณ  ๋ฒˆ์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ฐ˜ ์ƒํƒœ๊ณ„๋ฅผ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•ด ์‹œ์ž‘ํ•œ ํ”„๋กœ์ ํŠธ๋‹ค
  • ์ปดํŒŒ์ผ๋Ÿฌ?
    • ์ปดํŒŒ์ผ : ์–ด๋–ค ์–ธ์–ด์˜ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ณผ์ •
      • ex) ์‚ฌ๋žŒ์ด ์ดํ•ดํ•˜๊ณ  ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋Š” C์–ธ์–ด ์ฝ”๋“œ -> ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊ฟ”์คŒ
    • ์ปดํŒŒ์ผ๋Ÿฌ : ์–ด๋–ค ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์“ฐ์—ฌ์ง„ ์†Œ์ŠคํŒŒ์ผ์„ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” "๋ฒˆ์—ญ๊ธฐ" ์—ญํ• 

๊ทธ๋ ‡๋‹ค๋ฉด GCC์˜ ํŠน์ง•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.
์ผ๋‹จ ๋ฌด๋ฃŒ์ด๋‹ค.
GCC ํ•˜๋‚˜๋งŒ์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐ€์ง€์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค์„ ์ปดํŒŒ์ผ ํ•  ์ˆ˜ ์žˆ๋‹ค.
์„œ๋กœ ๋‹ค๋ฅธ ์šด์˜์ฒด์ œ๋“ค๊ณผ ํ˜ธํ™˜์ด ๊ฐ€๋Šฅํ•˜๊ณ , ๋‹ค๋ฅธ CPU ๋ณ„๋กœ ์„œ๋กœ ๋‹ค๋ฅธ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•ด๋‚ธ๋‹ค.


GCC์˜ ์ปดํŒŒ์ผ ๊ณผ์ • (4๋‹จ๊ณ„)

์ „์ฒ˜๋ฆฌ (.i) -> ์ปดํŒŒ์ผ (.s) -> ์–ด์…ˆ๋ธ” (.o) -> ๋งํฌ

  1. ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„ : ์†Œ์ŠคํŒŒ์ผ ๋‚ด์˜ '์ „์ฒ˜๋ฆฌ๊ธฐ ์ง€์‹œ์ž'๋ฅผ ์ฒ˜๋ฆฌ
$ gcc -E main.c -o main.i

์†Œ์ŠคํŒŒ์ผ hello.c -> ํ™•์žฅ ์†Œ์ŠคํŒŒ์ผ hello.i๊ฐ€ ์ƒ์„ฑ๋จ

  1. ์ปดํŒŒ์ผ ๋‹จ๊ณ„ : ์ „์ฒ˜๋ฆฌ๋œ ํŒŒ์ผ์„ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋œ ํŒŒ์ผ์ธ hello.sํŒŒ์ผ ์ƒ์„ฑ
    ๊ณ ์ˆ˜์ค€์–ธ์–ด๋ฅผ ์ €์ˆ˜์ค€ ์–ธ์–ด๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•จ.
    (*) ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ž€? ๊ธฐ๊ณ„์–ด๋ณด๋‹ค ํ•œ ๋‹จ๊ณ„ ์œ„์— ์žˆ๋Š” ์–ธ์–ด (์ €๊ธ‰์–ธ์–ด)
$ gcc -S main.i -o main.s

์ „์ฒ˜๋ฆฌ๋œ ํŒŒ์ผ hello.i -> ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋œ ํŒŒ์ผ hello.s ํŒŒ์ผ ์ƒ์„ฑ

  1. ์–ด์…ˆ๋ธ” ๋‹จ๊ณ„ : ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์—ญํ• ์„ ํ•จ ์ด ๊ธฐ๊ณ„์–ด๋Š” ์šฐ๋ฆฌ๊ฐ€ ๋ณผ ์ˆ˜ ์—†๊ณ , ๋””์Šค์–ด์…ˆ๋ธ”๋กœ ๊ธฐ๊ณ„์–ด๋ฅผ ๋‹ค์‹œ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋˜๋Œ๋ฆฌ๋ฉด ๋‚ด์šฉ ํ™•์ธ ๊ฐ€๋Šฅํ•˜๋‹ค
    (์ปดํ“จํ„ฐ๊ฐ€ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ 2์ง„์ˆ˜ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜)
$ gcc -c main.s -o main.o

์œ„์™€ ๊ฐ™์ด ํ•˜๋ฉด ์ฝ์„ ์ˆ˜ ์—†๋Š” ์ด์ƒํ•œ ๋ฌธ์ž๊ฐ€ ๋ณด์ธ๋‹ค

$ hexdump main.o

hexdump๋ฅผ ์ด์šฉํ•˜๋ฉด, ํ…์ŠคํŠธ ๋˜๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ 16์ง„์ˆ˜๋กœ ์ถœ๋ ฅ ๊ฐ€๋Šฅํ•˜๋‹ค

  1. ๋ง์ปค(๋งํฌ) ๋‹จ๊ณ„ : ๋งŒ๋“ค์–ด์ง„ ์˜ค๋ธŒ์ ํŠธ ์ฝ”๋“œ ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์‹คํ–‰ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •
$ gcc main.o -o main.exe

GCC ์„ค๋ช…


(์ฐธ๊ณ ํ•œ ๋ธ”๋กœ๊ทธ ์ฃผ์†Œ)