๐ ์ปดํ์ผ, ์ปดํ์ผ๋ฌ, ์ด์ ๋ธ๋ฌ, ๋ง์ปค, ๋ก๋
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ ์ฌ์ฉ ๋น์ ์ผ๋ ๊ธ์ ์ฎ๊ฒจ์จ ๊ธ ์ ๋๋ค. ์ผ๋ถ ์ค๋ฅ๊ฐ ์์ ์ ์์ต๋๋ค. ์ฐธ๊ณ
- Compile ์ปดํ์ผ
- ํน์ [์์] ์ธ์ด (Source) ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ[๋ชฉ์ ] ์ธ์ด (Target) ์ ์ฝ๋๋ก ๋ณ์ญ[ํด์, ๋ณํ]ํ๋ค, ํน์ ๊ทธ ๊ณผ์
- ์ฃผ๋ก โ๊ณ ๊ธ ์ธ์ด (High Level) ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ์ ๊ธ ์ธ์ด (Low Level) ๋ก ๋ฒ์ญํ๋ ๊ฒ, ํน์ ๊ทธ ๊ณผ์ โ ์ ์๋ฏธํจ
- Compiler ์ปดํ์ผ๋ฌ
- ์ปดํ์ผ[๋ฒ์ญ, ํด์, ๋ณํ]ํ๋ ํ๋ก๊ทธ๋จ
๋ณธ๋ ์ปดํ์ผ์ โํน์ ์ธ์ดโ๋ฅผ โ๋ค๋ฅธ ์ธ์ดโ๋ก ๋ฒ์ญํ๋ ๊ฒ, ํน์ ๊ทธ ๊ณผ์
- HLL โ HLL
- I.E. Java โ C#์ผ๋ก => Source to Source Compiler, Transcompiler)
- LLL โ HLL
- I.E. Byte Code โ Java, Python / ๊ธฐ๊ณ์ด, ์ด์ ๋ธ๋ฆฌ์ด โ C#(์ถ์)์ผ๋ก => Decompiler)
- LLL โ LLL
- I.E. ์ด์ ๋ธ๋ฆฌ์ด โ ๊ธฐ๊ณ์ด = Assembly, ๊ธฐ๊ณ์ดโ ์ด์ ๋ธ๋ฆฌ์ด = Disassembly)
- Compile ์ฌ์ ์ ์๋ฏธ
- (์ฌ๋ฌ ์ถ์ฒ์์ ์๋ฃ๋ฅผ ๋ฐ์) ์ฎ๋ค, ํธ์ง[ํธ์ฐฌ]ํ๋ค
- ์ ์ด๋ฐ ๋ป์ ๊ฐ์ง๊ณ ์๋ Compile ์ด โ~ ๋ฒ์ญํ๋ค(์ปดํจํฐ)โ ๋ผ๋ ์๋ฏธ๋?
- โ ์ต์ด์ ์ปดํ์ผ๋ฌ โA-0โ
- By Grace Hopper
- ํ๋์ ์ปดํ์ผ๋ฌ๋ก์ ๋์ํ๊ธฐ ๋ณด๋ค, ๋ง์ปค (Linker) ๋๋ ๋ก๋ (Loader) ๋ก์ ๋ ๋ง์ด ๋์๋๊ธฐ ๋๋ฌธ
- Linker
- ์ฌ๋ฌ ํ์ผ(Source Code, Library, โฆ)์ ํ๋์ ์คํ ํ์ผ๋ก ์ฐ๊ฒฐ์์ผ ์ฃผ๋ ์ญํ
- ๋๋ฌธ์ โA-0โ ๋ฅผ ์ค๋ช ํ๊ธฐ ์ํด โ์ฎ๋ค, ํธ์งํ๋คโ ๋ผ๋ ๋ป์ Compile + ~er = Compiler ๋ผ๋ ์ฉ์ด ๋ง๋ฆ
- ์ปดํ์ผ(์ปดํจํฐ)์ ๊ฐ๋ ์ด ์ ์ฐจ ๋ฐ๋๋ฉด์, ๋จ์ด์ ๋ป ์ญ์ โ~ ๋ฒ์ญํ๋ค(์ปดํจํฐ)โ ๋ก ๋ฐ๋
์ฐธ๊ณ : โํจ๊ปโ ๋ผ๋ ์๋ฏธ์ โComโ + โ์์์ฌ๋ฆฌ๋คโ ๋ผ๋ ์๋ฏธ์ โPileโ
- ์ปดํ์ผ์ ๊ณผ์ (I.E. HLL โ Machine L)
HLL : Source Code
โ Compiler
Machine L : Object Code
โ Linker
์คํ ํ์ผ
์ธ์ด์ ๋ฐ๋ผ
Source Code โ Object Code ๋ฒ์ญ ๊ณผ์ ๊น์ง๋ง์ ์๋ฏธํ๊ฑฐ๋,
Linker๋ฅผ ํตํ ์คํ ํ์ผ ์์ฑ ๊ณผ์ ๊น์ง๋ฅผ ์๋ฏธํ๋ ๊ฒฝ์ฐ๋ ์์
C๋ ์ ์
Object File ์ค๋ธ์ ํธ ํ์ผ : ๊ธฐ๊ณ์ด๋ก ์ด๋ฃจ์ด์ง ํ์ผ
- Linking : ํ ๊ฐ ์ด์์ผ๋ก ์กด์ฌํ๋ ์ค๋ธ์ ํธ ์ฝ๋๋ฅผ ํฉ์ณ ํ๋์ .exe ์คํ ํ์ผ๋ก ๋ง๋๋ ๊ฒ, ํน์ ๊ทธ ๊ณผ์
- Linker
1
2
3
4
5
6
#include <stdio.h>
int main()
{
printf("Hello, World!");
return 0;
}
์ฝ๋ฉ ์ ํ๋ก๊ทธ๋จ์ ํ์ํ ๋ชจ๋ ์ฝ๋๋ฅผ ์์ฑํ์ง ์๊ณ , ์ด๋ฏธ ๋ง๋ค์ด์ง ์ฝ๋๋ฅผ ๊ฐ์ ธ์ ์ฌ์ฉ
I.E.
printf๋ #include
1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Program1.c
#include <stdio.h>
extern int age;
int main()
{
printf("My age is %d", age);
return 0;
}
// Program2.c
#include <stdio.h>
int age = 20;
๋ํ, ๋ณดํต ๋ค์์ ์ฝ๋ ํ์ผ์ ๋ค๋ฃจ๊ฒ ๋๊ณ , ๊ทธ ์ฝ๋๋ค์ ์๋ก์๊ฒ ์ํฅ์ ์ค
โ ์์ฑํ Source Code์, Library ๋ฑ์ ํ๋๋ก ํฉ์ณ ํ๋์ .exe ์คํํ์ผ๋ก ๋ง๋๋ ์์ โ I.E. C Code์, stdio.h Library๋ฅผ ํ๋๋ก ํฉ์ณ ํ๋์ .exe ์คํํ์ผ๋ก ๋ง๋๋ ์์
โ Linking, Linker
- ์ปดํ์ผ๋ฌ์ ์ข
๋ฅ
- ํน์ ํ๋ซํผ โ ๋ค๋ฅธ ํ๋ซํผ
- I.E. Window10 โ Android, Crosscompiler
- ์ปดํ์ผ๋ฌ์์ ์ปดํ์ผ๋ฌ๋ฅผ
- I.E. CompilerCompiler
- ํน์ ํ๋ซํผ โ ๋ค๋ฅธ ํ๋ซํผ