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) -> ๋งํฌ
- ์ ์ฒ๋ฆฌ ๋จ๊ณ : ์์คํ์ผ ๋ด์ '์ ์ฒ๋ฆฌ๊ธฐ ์ง์์'๋ฅผ ์ฒ๋ฆฌ
$ gcc -E main.c -o main.i
์์คํ์ผ hello.c
-> ํ์ฅ ์์คํ์ผ hello.i
๊ฐ ์์ฑ๋จ
- ์ปดํ์ผ ๋จ๊ณ : ์ ์ฒ๋ฆฌ๋ ํ์ผ์ ์ด์
๋ธ๋ฆฌ์ด๋ก ๋ ํ์ผ์ธ
hello.s
ํ์ผ ์์ฑ
๊ณ ์์ค์ธ์ด๋ฅผ ์ ์์ค ์ธ์ด๋ก ๋ํ๋ด๋ ์ญํ ์ ์ํํจ.
(*) ์ด์ ๋ธ๋ฆฌ์ด๋? ๊ธฐ๊ณ์ด๋ณด๋ค ํ ๋จ๊ณ ์์ ์๋ ์ธ์ด (์ ๊ธ์ธ์ด)
$ gcc -S main.i -o main.s
์ ์ฒ๋ฆฌ๋ ํ์ผ hello.i
-> ์ด์
๋ธ๋ฆฌ์ด๋ก ๋ ํ์ผ hello.s
ํ์ผ ์์ฑ
- ์ด์
๋ธ ๋จ๊ณ : ์ด์
๋ธ๋ฆฌ์ด ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ฐ๊ฟ์ฃผ๋ ์ญํ ์ ํจ
์ด ๊ธฐ๊ณ์ด๋ ์ฐ๋ฆฌ๊ฐ ๋ณผ ์ ์๊ณ , ๋์ค์ด์
๋ธ๋ก ๊ธฐ๊ณ์ด๋ฅผ ๋ค์ ์ด์
๋ธ๋ฆฌ์ด๋ก ๋๋๋ฆฌ๋ฉด ๋ด์ฉ ํ์ธ ๊ฐ๋ฅํ๋ค
(์ปดํจํฐ๊ฐ ์ฝ์ ์ ์๋ 0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง 2์ง์ ์ฝ๋๋ก ๋ณํ)
$ gcc -c main.s -o main.o
์์ ๊ฐ์ด ํ๋ฉด ์ฝ์ ์ ์๋ ์ด์ํ ๋ฌธ์๊ฐ ๋ณด์ธ๋ค
$ hexdump main.o
hexdump
๋ฅผ ์ด์ฉํ๋ฉด, ํ
์คํธ ๋๋ ๋ฐ์ด๋๋ฆฌ ํ์ผ์ ๋ด์ฉ์ 16์ง์๋ก ์ถ๋ ฅ ๊ฐ๋ฅํ๋ค
- ๋ง์ปค(๋งํฌ) ๋จ๊ณ : ๋ง๋ค์ด์ง ์ค๋ธ์ ํธ ์ฝ๋ ํ์ผ์ ํ๋๋ก ๋ฌถ์ด ์คํํ์ผ๋ก ๋ง๋๋ ๊ณผ์
$ gcc main.o -o main.exe
(์ฐธ๊ณ ํ ๋ธ๋ก๊ทธ ์ฃผ์)