์ปดํ์ผ(Compile)์ ๋ํ ์ดํด
์๋ก
C, C++, Java ํ๋ก๊ทธ๋๋ฐ์ ํด๋ดค์ผ๋ฉด ์์ฑํ ์์ค ์ฝ๋๋ฅผ ๋น๋(Build) ํน์ ์ปดํ์ผ(Compile)ํด์ ์คํํด๋ดค๊ฑฐ๋ ์ฝ๋๋ฅผ ์๋ชป ์์ฑํ์ฌ ์ปดํ์ผ ์๋ฌ๊ฐ ๋ฌ๋ ๊ฒฝํ์ด ์์ ๊ฒ์ด๋ค.
์ ํํ๊ฒ ์ปดํ์ผ์ด ์ด๋ ํ ์ผ์ ํ๋์ง ๋ชจ๋ฅด๊ณ ๋ง์ฐํ๊ฒ "์ปดํ์ผ์ ํ๋ฉด ์์ค ์ฝ๋์ ๋ฌธ๋ฒ์ ๊ฒ์ฌํ๊ณ ์คํํ๋ ๋ณด๋ค"๋ผ๊ณ ์๊ฐํ๋ค๋ฉด ์ด์ฐธ์ ์์ธํ ์์๋ณด์.
โป ๊ทธ๋ฆผ์ด๋ ์์๋ ๋ฆฌ๋ ์ค ํ๊ฒฝ์ C์ธ์ด ์ปดํ์ผ ๊ณผ์ ์ ์ค์ฌ์ผ๋ก ์ด์ผ๊ธฐํ๋ฏ๋ก ์ธ์ด, ํ๊ฒฝ์ ๋ฐ๋ผ ์ฐจ์ด๊ฐ ์์ ์ ์๋ค.
์ปดํ์ผ์ ์ ์
์ปดํ์ผ์ ์ธ๊ฐ์ด ์ดํดํ ์ ์๋ ์ธ์ด๋ก ์์ฑ๋ ์์ค ์ฝ๋(๊ณ ์์ค ์ธ์ด : C, C++, Java ๋ฑ)๋ฅผ CPU๊ฐ ์ดํดํ ์ ์๋ ์ธ์ด(์ ์์ค ์ธ์ด : ๊ธฐ๊ณ์ด)๋ก ๋ฒ์ญ(๋ณํ)ํ๋ ์์ ์ ๋งํ๋ค.
์ฐ๋ฆฌ๊ฐ C, C++, Java๋ก ์์ฑํ๋ ์์ค ์ฝ๋๋ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๋ค. ์ปดํจํฐ๋ 0, 1๋ก ์ด๋ฃจ์ด์ง ๊ธฐ๊ณ์ด๋ง ์ดํดํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์์ค ์ฝ๋๋ฅผ ์ปดํจํฐ๊ฐ ์ดํดํ ์ ์๊ฒ 0, 1๋ก ์ด๋ฃจ์ด์ง ๊ธฐ๊ณ์ด๋ก ๋ฒ์ญํ๋ ์ปดํ์ผ ๊ณผ์ ์ด ํ์ํ๋ค.
์์ค ์ฝ๋๋ ์ปดํ์ผ์ ํตํด ๊ธฐ๊ณ์ด๋ก ์ด๋ฃจ์ด์ง ์คํ ํ์ผ์ด ๋๋ค. ์ด ํ์ผ์ ์คํํ๋ฉด ์คํ ํ์ผ ๋ด์ฉ์ด ์ด์์ฒด์ ์ Loader๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด ํ๋ก๊ทธ๋จ์ด ๋์ํ๋ค.
์ปดํ์ผ ๊ณผ์
์ปดํ์ผ ๊ณผ์ ์ 4๊ฐ์ง ๋จ๊ณ(์ ์ฒ๋ฆฌ ๊ณผ์ - ์ปดํ์ผ ๊ณผ์ - ์ด์ ๋ธ๋ฆฌ ๊ณผ์ - ๋งํน ๊ณผ์ )๋ก ๋๋์ด ์ง๋ค.
์ด 4๊ฐ์ง ๋จ๊ณ๋ฅผ ๋ฌถ์ด์ ์ปดํ์ผ ๊ณผ์ , ๋น๋ ๊ณผ์ ์ด๋ผ๊ณ ๋ถ๋ฅด๊ธฐ๋ ํ๊ณ ์ปดํ์ผ ๊ณผ์ ๊ณผ ๋งํน ๊ณผ์ ์ ๋ฐ๋ก ๋๋ ์ ๋ถ๋ฅด๊ธฐ๋ ํ๋ค.
๋ณดํต ๋น๋ ๊ณผ์ ์ ์ปดํ์ผ ๊ณผ์ ๋ณด๋ค ๋์ ์๋ฏธ(๋น๋=์ปดํ์ผ+๋งํน)๋ก ์ฌ์ฉ๋๋๋ฐ ์ํฉ์ ๋ง๊ฒ ์ดํดํ๋ฉด ๋ ๊ฑฐ ๊ฐ๋ค.
๊ทธ๋ผ ๊ฐ ๋จ๊ณ๋ณ ๊ณผ์ ์ ๋ํด ์์ธํ ์์๋ณด์.
1. ์ ์ฒ๋ฆฌ(Pre-processing) ๊ณผ์
์ ์ฒ๋ฆฌ(Pre-processing) ๊ณผ์ ์ ์ ์ฒ๋ฆฌ๊ธฐ(Preprocessor)๋ฅผ ํตํด ์์ค ์ฝ๋ ํ์ผ(*.c)์ ์ ์ฒ๋ฆฌ๋ ์์ค ์ฝ๋ ํ์ผ(*.i)๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค.
์ด ๊ณผ์ ์์ ๋ํ์ ์ผ๋ก ์ธ ๊ฐ์ง ์์ ์ ์ํํ๋ค.
์ฃผ์ ์ ๊ฑฐ : ์์ค ์ฝ๋์์ ์ฃผ์์ ์ ๋ถ ์ ๊ฑฐํ๋ค. ์ฃผ์์ ์ฌ๋๋ค์ด ์์๋ณผ ์ ์๊ฒ ๋จ๊ธด ๋ด์ฉ์ด์ง ์ปดํจํฐ๊ฐ ์ ํ์๋ ์๊ธฐ ๋๋ฌธ์ด๋ค.
ํค๋ ํ์ผ ์ฝ์ : #include ์ง์๋ฌธ์ ๋ง๋๋ฉด ํด๋นํ๋ ํค๋ ํ์ผ์ ์ฐพ์ ํค๋ ํ์ผ์ ์๋ ๋ชจ๋ ๋ด์ฉ์ ๋ณต์ฌํด์ ์์ค ์ฝ๋์ ์ฝ์ ํ๋ค. ์ฆ, ํค๋ ํ์ผ์ ์ปดํ์ผ์ ์ฌ์ฉ๋์ง ์๊ณ ์์ค ์ฝ๋ ํ์ผ ๋ด์ ์ ๋ถ ๋ณต์ฌ๋๋ค. ํค๋ ํ์ผ์ ์ ์ธ๋ ํจ์ ์ํ์ ํ์ ๋งํน ๊ณผ์ ์ ํตํด ์ค์ ๋ก ํจ์๊ฐ ์ ์๋์ด ์๋ ์ค๋ธ์ ํธ ํ์ผ(์ปดํ์ผ๋ ์์ค ์ฝ๋ ํ์ผ)๊ณผ ๊ฒฐํฉํ๋ค.
๋งคํฌ๋ก ์นํ ๋ฐ ์ ์ฉ : #define ์ง์๋ฌธ์ ์ ์๋ ๋งคํฌ๋ก๋ฅผ ์ ์ฅํ๊ณ ๊ฐ์ ๋ฌธ์์ด์ ๋ง๋๋ฉด #define ๋ ๋ด์ฉ์ผ๋ก ์นํํ๋ค. ๊ฐ๋จํ๊ฒ ๋งํด ๋งคํฌ๋ก ์ด๋ฆ์ ์ฐพ์์ ์ ์ํ ๊ฐ์ผ๋ก ์ ๋ถ ๋ฐ๊ฟ์ค๋ค.
2. ์ปดํ์ผ(Compilation) ๊ณผ์
์ปดํ์ผ(Compilation) ๊ณผ์ ์ ์ปดํ์ผ๋ฌ(Compiler)๋ฅผ ํตํด ์ ์ฒ๋ฆฌ๋ ์์ค ์ฝ๋ ํ์ผ(*.i)์ ์ด์ ๋ธ๋ฆฌ์ด ํ์ผ(*.s)๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค.
์ด ๊ณผ์ ์์ ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ปดํ์ผํ๋ฉด ์๊ฐํ๋ ์ธ์ด์ ๋ฌธ๋ฒ ๊ฒ์ฌ๊ฐ ์ด๋ฃจ์ด์ง๋ค. ๋ํ Staticํ ์์ญ(Data, BSS ์์ญ)๋ค์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ํํ๋ค.
์ปดํ์ผ๋ฌ ๊ตฌ์กฐ
์ปดํ์ผ๋ฌ๋ ์ธ ๋จ๊ณ(ํ๋ก ํธ์๋ - ๋ฏธ๋ค์๋ - ๋ฐฑ์๋)๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
ํ๋ก ํธ์๋(Front-end)
ํ๋ก ํธ์๋์์๋ ์ธ์ด ์ข ์์ ์ธ ๋ถ๋ถ์ ์ฒ๋ฆฌํ๋ค.
์์ค ์ฝ๋๊ฐ ํด๋น ์ธ์ด๋ก ์ฌ๋ฐ๋ฅด๊ฒ ์์ฑ๋์๋์ง ํ์ธ(์ดํ/๊ตฌ๋ฌธ/์๋ฏธ ๋ถ์)ํ๊ณ ๋ฏธ๋ค์๋์ ๋๊ฒจ์ฃผ๊ธฐ ์ํ GIMPLE ํธ๋ฆฌ(์์ค ์ฝ๋๋ฅผ ํธ๋ฆฌ ํํ๋ก ํํํ ์๋ฃ ๊ตฌ์กฐ)๋ฅผ ์์ฑํ๋ค.
์ด ๊ณผ์ ์์ C, C++, Java์ ๊ฐ์ ๋ค์ํ ์ธ์ด๋ค์ด ๊ฐ ์ธ์ด์ ๋ง๊ฒ ์ฒ๋ฆฌ๋ ํ ๊ณตํต๋ ์ค๊ฐ ํํ(IR : Intermediate representation)์ธ GIMPLE ํธ๋ฆฌ๋ก ๋ณํ๋๋ฏ๋ก ์ธ์ด ์ข ์์ ์ธ ๋ถ๋ถ์ ์ฒ๋ฆฌํ ์ ์๋ค.
๋ฏธ๋ค์๋(Middle-end)
๋ฏธ๋ค์๋์์๋ ์ํคํ ์ณ ๋น์ข ์์ ์ธ ์ต์ ํ๋ฅผ ์ํํ๋ค.
์ํคํ ์ณ ๋น์ข ์์ ์ธ ์ต์ ํ๋ CPU ์ํคํ ์ณ๊ฐ ๋ฌด์์ด๋ (arm, x86 ๋ฑ) ์๊ด์์ด ํ ์ ์๋ ์ต์ ํ๋ฅผ ๋งํ๋ค.
ํ๋ก ํธ์๋์์ ๋๊ฒจ๋ฐ์ GIMPLE ํธ๋ฆฌ๋ฅผ ์ด์ฉํด ์ํคํ ์ณ ๋น์ข ์์ ์ธ ์ต์ ํ๋ฅผ ์ํํ ํ ๋ฐฑ์๋์์ ์ฌ์ฉํ๋ RTL(Register Transfer Language : ๊ณ ๊ธ ์ธ์ด์ ์ด์ ๋ธ๋ฆฌ ์ธ์ด์ ์ค๊ฐ ํํ)๋ฅผ ์์ฑํ๋ค.
๋ฐฑ์๋(Back-end)
๋ฐฑ์๋์์๋ ์ํคํ ์ณ ์ข ์์ ์ธ ์ต์ ํ๋ฅผ ์ํํ๋ค.
์ํคํ ์ณ ์ข ์์ ์ธ ์ต์ ํ๋ ์ํคํ ์ณ ํน์ฑ์ ๋ฐ๋ผ ์ต์ ํ๋ฅผ ์ํํ๋ ๊ฒ์ ๋งํ๋ค. ๊ฐ์ ๊ธฐ๋ฅ์ ์ํํ๋ ๋ช ๋ น์ด์ฌ๋ CPU ์ํคํ ์ฒ๋ณ๋ก ๋์ฑ ํจ์จ์ ์ธ ๋ช ๋ น์ด๋ก ๋์ฒดํ์ฌ ์ฑ๋ฅ์ ๋์ด๋ ์์ ์ ์๋ฅผ ๋ค ์ ์๋ค.
๋ฏธ๋ค์๋์์ ๋๊ฒจ๋ฐ์ RTL์ ์ด์ฉํด ์ํคํ ์ณ ์ข ์์ ์ธ ์ต์ ํ๋ฅผ ์ํํ๊ณ ์ต์ ํ๊ฐ ์๋ฃ๋๋ฉด ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ๋ค.
์ํคํ ์ณ ์ข ์์ ์ธ ์ต์ ํ๋ฅผ ์ํํ๋ฉด ํด๋น ์ํคํ ์ณ๋ง ์ดํดํ ์ ์๋ ์ธ์ด๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ํคํ ์ณ๊ฐ ๋ง์ง ์์ผ๋ฉด ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ํด์ํ ์ ์๋ค.
์ด์ ๋ธ๋ฆฌ์ด ์ ์
๊ธฐ๊ณ์ด๋ ๋ค๋ฅธ ๋ง๋ก ๋ช ๋ น์ด(Machine Instruction)์ด๋ผ๊ณ ๋ถ๋ฅด๋๋ฐ ๋ช ๋ น์ด๋ 0101010๊ณผ ๊ฐ์ ์ด์ง์๋ก ์ด๋ค์ง ์ซ์๋ก CPU ์ข ๋ฅ๋ง๋ค ๊ณ ์ ํ ๋ด์ฉ์ ๊ฐ์ง๊ณ ์๋ค.
์ด์ ๋ธ๋ฆฌ์ด๋ ์ด๋ฐ ๋ช ๋ น์ด๋ฅผ ์ฌ๋์ด ์ดํดํ ์ ์๊ฒ ๋ถํธํํ ๊ฒ์ผ๋ก CPU ๋ช ๋ น์ด(๊ธฐ๊ณ์ด)์ 1๋1๋ก ๋งค์นญ๋๋ค.
๋ง์ ์ปดํ์ผ๋ฌ๊ฐ ์์ ์ค๋ช ํ ์ธ ๋จ๊ณ์ ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๊ณ ์์ง๋ง, ์ปดํ์ผ๋ฌ๋ง๋ค ์ฐจ์ด๊ฐ ์กด์ฌํ๋ค.
GNU์์ ๋ง๋ C ์ปดํ์ผ๋ฌ์ธ gcc๋ ํ๋ก ํธ์๋/๋ฏธ๋ค์๋/๋ฐฑ์๋ ๋จ๊ณ๊ฐ ๊น๋ํ๊ฒ ๋ถ๋ฆฌ๋์ด ์์ง ์๊ณ ์์กด์ฑ์ด ์กด์ฌํ๋ค. ๊ทธ์ ๋นํด ์คํ ์์ค C ์ปดํ์ผ๋ฌ์ธ Clang(ํ๋ก ํธ์๋) + LLVM(๋ฏธ๋ค์๋, ๋ฐฑ์๋)๋ ๋จ๊ณ๊ฐ ์ ๋ถ๋ฆฌ๋์ด ์๋ค.
3. ์ด์ ๋ธ๋ฆฌ(Assembly) ๊ณผ์
์ด์ ๋ธ๋ฆฌ(Assembly) ๊ณผ์ ์ ์ด์ ๋ธ๋ฌ(Assembler)๋ฅผ ํตํด ์ด์ ๋ธ๋ฆฌ์ด ํ์ผ(*.s)์ ์ค๋ธ์ ํธ ํ์ผ(*.o)๋ก ๋ณํํ๋ ๊ณผ์ ์ด๋ค.
๊ทธ๋ผ ์ค๋ธ์ ํธ ํ์ผ์ด๋ ๋ฌด์์ผ๊น?
์ค๋ธ์ ํธ ํ์ผ(Object File) ์ ์
์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ ์ด์ ๋ ์ด์ ์ฌ๋์ด ์์๋ณผ ์ ์๋ ๊ธฐ๊ณ์ด๋ก ๋ณํ๋๋๋ฐ ์ด๋ฅผ ์ค๋ธ์ ํธ ์ฝ๋๋ผ ๋ถ๋ฅธ๋ค.
์ค๋ธ์ ํธ ์ฝ๋๋ก ๊ตฌ์ฑ๋ ํ์ผ์ ์ค๋ธ์ ํธ ํ์ผ(Object File)์ด๋ผ ๋ถ๋ฅด๋ฉฐ ์ด ์ค๋ธ์ ํธ ํ์ผ์ ํน์ ํ ํ์ผ ํฌ๋งท์ ๊ฐ์ง๋ค.
โป ์ค๋ธ์ ํธ ํ์ผ ํฌ๋งท์ ์ข ๋ฅ๋ Windows์ ๊ฒฝ์ฐ PE(Portable Executable), Linux์ ๊ฒฝ์ฐ ELF(Executable and Linking Format)๋ก ๋๋ ์ง๋ค.
์ค๋ธ์ ํธ ํ์ผ ํฌ๋งท(Object File Format)
์ค๋ธ์ ํธ ํ์ผ ํฌ๋งท์ ๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ํ๊ณ ์๋ค.
์ค๋ธ์ ํธ ํ์ผ ํค๋(Object File Header) : ์ค๋ธ์ ํธ ํ์ผ์ ๊ธฐ์ด ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ์๋ ํค๋
ํ ์คํธ ์น์ (Text Section) : ๊ธฐ๊ณ์ด๋ก ๋ณํ๋ ์ฝ๋๊ฐ ๋ค์ด ์๋ ๋ถ๋ถ
๋ฐ์ดํฐ ์น์ (Data Section) : ๋ฐ์ดํฐ(์ ์ญ ๋ณ์, ์ ์ ๋ณ์)๊ฐ ๋ค์ด ์๋ ๋ถ๋ถ
์ฌ๋ณผ ํ ์ด๋ธ ์น์ (Symbol Table Section) : ์์ค ์ฝ๋์์ ์ฐธ์กฐ๋๋ ์ฌ๋ณผ๋ค์ ์ด๋ฆ๊ณผ ์ฃผ์๊ฐ ์ ์ ๋์ด ์๋ ๋ถ๋ถ.
์ฌ๋ฐฐ์น ์ ๋ณด ์น์ (Relocation Information Section) : ๋งํน ์ ๊น์ง ์ฌ๋ณผ์ ์์น๋ฅผ ํ์ ํ ์ ์์ผ๋ฏ๋ก ์ฌ๋ณผ์ ์์น๊ฐ ํ์ ๋๋ฉด ๋ฐ๊ฟ์ผ ํ ๋ด์ฉ์ ์ ์ด๋์ ๋ถ๋ถ
๋๋ฒ๊น ์ ๋ณด ์น์ (Debugging Information Secion) : ๋๋ฒ๊น ์ ํ์ํ ์ ๋ณด๊ฐ ์๋ ๋ถ๋ถ
์ฌ๊ธฐ์ ์ค์ํ ๋ถ๋ถ์ ์ฌ๋ณผ ํ ์ด๋ธ ์น์ ๊ณผ ์ฌ๋ฐฐ์น ์ ๋ณด ์น์ ์ด๋ค.
์ฌ๋ณผ(Symbol)์ ํจ์๋ ๋ณ์๋ฅผ ์๋ณํ ๋ ์ฌ์ฉํ๋ ์ด๋ฆ์ผ๋ก ์ฌ๋ณผ ํ ์ด๋ธ(Symbol Table) ์์๋ ์ค๋ธ์ ํธ ํ์ผ์์ ์ฐธ์กฐ๋๊ณ ์๋ ์ฌ๋ณผ ์ ๋ณด(์ด๋ฆ๊ณผ ๋ฐ์ดํฐ์ ์ฃผ์ ๋ฑ)๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
์ด๋ ์ค๋ธ์ ํธ ํ์ผ์ ์ฌ๋ณผ ํ ์ด๋ธ์๋ ํด๋น ์ค๋ธ์ ํธ ํ์ผ์ ์ฌ๋ณผ ์ ๋ณด๋ง ๊ฐ์ง๊ณ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ํ์ผ์์ ์ฐธ์กฐ๋๊ณ ์๋ ์ฌ๋ณผ ์ ๋ณด์ ๊ฒฝ์ฐ ์ฌ๋ณผ ํ ์ด๋ธ์ ์ ์ฅํ ์ ์๋ค.
#include<stdio.h> ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํด์ printf ํจ์๋ฅผ ์ฌ์ฉํ๋ ์์ค ์ฝ๋ ํ์ผ์ด ์๋ค๊ณ ๊ฐ์ ํด๋ณด์.
์ฐ๋ฆฐ ์ด ์์ค ์ฝ๋ ํ์ผ์ ์ปดํ์ผํ์ฌ ์ค๋ธ์ ํธ ํ์ผ์ ์์ฑํ ์ ์๋ค.
ํ์ง๋ง ์ด ์ค๋ธ์ ํธ ํ์ผ์ ๋ ๋ฆฝ์ ์ผ๋ก ์คํํ ์ ์๋ค. ์ด ํ์ผ ์์๋ printf ํจ์๋ฅผ ๊ตฌํํ ๋ด์ฉ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ ์ฒ๋ฆฌ ๊ณผ์ ์ ํตํด #include<stdio.h>๋ก๋ถํฐ printf ํจ์์ ์ํ์ ๋ณต์ฌํ์ง๋ง printf๋ฅผ ๊ตฌํํ ๋ด์ฉ์ ํฌํจ๋์ด ์์ง ์๋ค. ์ค๋ธ์ ํธ ํ์ผ ๊ตฌ์กฐ์์ ๋งํ ๊ฒ์ฒ๋ผ ์ฌ๋ณผ ํ ์ด๋ธ์๋ ํด๋น ์ค๋ธ์ ํธ ํ์ผ์ ์ฌ๋ณผ ์ ๋ณด๋ง ๊ฐ์ง๊ณ ์์ง ์ธ๋ถ์์ ์ฐธ์กฐํ๋ printf ํจ์์ ๋ํ ์ฌ๋ณผ ์ ๋ณด๋ ๊ฐ์ง๊ณ ์์ง ์๋ค.
์ฆ, ์ด ์ค๋ธ์ ํธ ํ์ผ์ ์คํํ๊ธฐ ์ํด์๋ printf ํจ์๋ฅผ ์ฌ์ฉํ๋ ์ค๋ธ์ ํธ ํ์ผ๊ณผ printf ํจ์๋ฅผ ๊ตฌํํ ์ค๋ธ์ ํธ ํ์ผ(libc.a ๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ์ฐ๊ฒฐ์ํค๋ ์์ ์ด ํ์ํ๋ค.
์ด๋ฌํ ์ฐ๊ฒฐ ๊ณผ์ ์ ๋งํน(Linking)์ด๋ผ ๋ถ๋ฅธ๋ค. ๊ทธ๋ผ ๋งํน์ ๋ํด ์์ธํ ์์๋ณด์.
4. ๋งํน(Linking) ๊ณผ์
๋งํน(Linking) ๊ณผ์ ์ ๋ง์ปค(Linker)๋ฅผ ํตํด ์ค๋ธ์ ํธ ํ์ผ(*.o)๋ค์ ๋ฌถ์ด ์คํ ํ์ผ๋ก ๋ง๋๋ ๊ณผ์ ์ด๋ค.
์ด ๊ณผ์ ์์ ์ค๋ธ์ ํธ ํ์ผ๋ค๊ณผ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๋ค์ ๋งํฌํ์ฌ ํ๋์ ์คํ ํ์ผ์ ๋ง๋ ๋ค.
์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋งํฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ์ ์ ๋งํน(Static Linking)๊ณผ ๋์ ๋งํน(Dynamic Linking)์ผ๋ก ๋๋ ์ ์๋ค. ๋งํน ๋ฐฉ์์ ์ฐจ์ด๋ ์์ ์ค๋ช ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ์คํธ๋ฅผ ์ฐธ๊ณ ํ์.
๋ง์ปค์ ์ญํ
๋ง์ปค์ ์ญํ ์ ํฌ๊ฒ ์ฌ๋ณผ ํด์๊ณผ ์ฌ๋ฐฐ์น๋ก ๋๋ ์ ์๋ค.
์ฌ๋ณผ ํด์(Symbol Resolution)
์ฌ๋ณผ ํด์์ ๊ฐ ์ค๋ธ์ ํธ ํ์ผ์ ์๋ ์ฌ๋ณผ ์ฐธ์กฐ๋ฅผ ์ด๋ค ์ฌ๋ณผ ์ ์์ ์ฐ๊ด์ํฌ์ง ๊ฒฐ์ ํ๋ ๊ณผ์ ์ด๋ค. ์ฌ๋ฌ ๊ฐ์ ์ค๋ธ์ ํธ ํ์ผ์ ๊ฐ์ ์ด๋ฆ์ ํจ์ ๋๋ ๋ณ์๊ฐ ์ ์๋์ด ์์ ๋ ์ด๋ค ํ์ผ์ ์ด๋ค ํจ์๋ฅผ ์ฌ์ฉํ ์ง ๊ฒฐ์ ํ๋ค.
์ฌ๋ฐฐ์น(Relocation)
์ฌ๋ฐฐ์น๋ ์ค๋ธ์ ํธ ํ์ผ์ ์๋ ๋ฐ์ดํฐ์ ์ฃผ์๋ ์ฝ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ์ฃผ์๋ฅผ ์๋ง๊ฒ ๋ฐฐ์นํ๋ ๊ณผ์ ์ด๋ค.
๋ง์ปค๊ฐ ์ปดํ์ผ๋ฌ๊ฐ ์์ฑํ ์ค๋ธ์ ํธ ํ์ผ์ ๋ชจ์์ ํ๋์ ์คํ ํ์ผ์ ๋ง๋ค ๋, ๊ฐ ์ค๋ธ์ ํธ ํ์ผ์ ์๋ ๋ฐ์ดํฐ์ ์ฃผ์๋ ์ฝ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ์ฃผ์๊ฐ ๋ง์ปค์ ์ํด ํฉ์ณ์ง ์คํ ํ์ผ์์์ ์ฃผ์์ ๋ค๋ฅด๊ฒ ๋๋ฌธ์ ๊ทธ๊ฒ์ ์๋ง๊ฒ ์์ ํด์ค์ผ ํ๋ค.
์ด๋ฅผ ์ํด ์ค๋ธ์ ํธ ํ์ผ ์์ ์ฌ๋ฐฐ์น ์ ๋ณด ์น์ (Relocation Information Section)์ด ์กด์ฌํ๋ค.
๋งํน ๊ณผ์ ์์ ๊ฐ์ ์ธ์ ๋ผ๋ฆฌ ํฉ์ณ์ง ํ ์ฌ๋ฐฐ์น๊ฐ ์ผ์ด๋๋ค.
์ ๊ทธ๋ฆผ์ ํตํด ์ ์ ์๋ฏ์ด ์ค๋ธ์ ํธ ํ์ผ ํ์์ ๋งํน ๊ณผ์ ์์ ๋ง์ปค๊ฐ ์ฌ๋ฌ ๊ฐ์ ์ค๋ธ์ ํธ ํ์ผ๋ค์ ํ๋์ ์คํ ํ์ผ๋ก ๋ฌถ์ ๋ ํ์ํ ์ ๋ณด๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ ํ ์ ์๋ ๊ตฌ์กฐ์ด๋ค.
๋งํน์ ํ๊ธฐ ์ ์ค๋ธ์ ํธ ํ์ผ์ ์ฌ๋ฐฐ์น ๊ฐ๋ฅํ ์ค๋ธ์ ํธ ํ์ผ(Relocatable Object File)์ด๋ผ ๋ถ๋ฅด๊ณ ๋งํน์ ํตํด ๋ง๋ค์ด์ง๋ ์ค๋ธ์ ํธ ํ์ผ์ ์คํ ๊ฐ๋ฅํ ์ค๋ธ์ ํธ ํ์ผ(Executable Object File)์ด๋ผ ๋ถ๋ฅธ๋ค.
๊ฒฐ๋ก
์ด๋ก์จ ์ปดํ์ผ์ ํตํด ์์ค ์ฝ๋ ํ์ผ์ด ์คํ ํ์ผ์ด ๋๋ ๊ณผ์ ์ ๋ํด ์์๋ณด์๋ค.
์ด ๊ธ์ ํตํด ํ๋ก๊ทธ๋๋ฐ์ ์๋ฆฌ๋ฅผ ์ดํดํ๋ ๋ฐ ์กฐ๊ธ์ ๋์์ด ๋์์ผ๋ฉด ์ข๊ฒ ๋ค.
โป ์ปดํ์ผ ๊ณผ์ ๋์ ์ฐ์์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฐ๋ฐ ๋๊ตฌ๋ค(์ ์ฒ๋ฆฌ๊ธฐ-์ปดํ์ผ๋ฌ-์ด์ ๋ธ๋ฆฌ-๋ง์ปค)์ ๋ฌถ์ด์ ํด์ฒด์ธ(Toolchain)์ด๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
๋๐ค