컴파일, 컴파일러, 어셈블러, 링커, 로더
네이버 블로그 사용 당시 썼던 글을 옮겨온 글 입니다. 일부 오류가 있을 수 있습니다. 참고
- 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 라는 용어 만듦
- 컴파일(컴퓨터)의 개념이 점차 바뀌면서, 단어의 뜻 역시 ‘~ 번역하다(컴퓨터)’ 로 바뀜
- 컴파일의 과정 (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
- 특정 플랫폼 → 다른 플랫폼
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.