본문 바로가기
Programming

컴파일과 링크

by minjunkim.dev 2020. 8. 22.

1. 전처리기

- #으로 시작하는 지시자에 따라 실행파일 생성에서 가장 먼저 실행됨

- 소스코드의 주석 제거, define 치환, 매크로 치환 등...

 

2. 컴파일러

- 전처리기를 거친 소스코드는 컴파일러에 의해 어셈블리 코드로 변환됨

- 어셈블리 코드는 CPU 명령어 조합, 따라서 어셈블리어는 CPU에 의존적임

 

3. 어셈블러

- 컴파일러를 거친 어셈블리 코드는 어셈블러에 의해 오브젝트 코드로 변환됨

- 오브젝트 코드는 0과 1로 구성된 이진코드이며, 주소정보는 아직 확정되지 않은 상태임

 

4. 링커

- 어셈블러를 거친 오브젝트 코드는 링커에 의해 사용된 함수 라이브러리와 하나로 묶여 실행파일로 변환됨

- 운영체제의 로더가 메모리에 로딩(적재)할 수 있도록 주소정보를 적절하게 할당함,

따라서 링커는 운영체제에 의존적임


# 빌드란?

- 컴파일 + 링크 과정을 합친 것

- 컴파일 : 소스코드를 오브젝트 코드로 변환

- 링크 : 컴파일 과정을 거친 오브젝트 코드와 사용된 함수 라이브러리를 묶어서 실행파일로 만듦

- 컴파일 과정은 위에서 설명한 1. 전처리기, 2. 컴파일러, 3. 어셈블러 를 거치면서,

소스코드 => 어셈블리 코드 => 오브젝트 코드 로 변환한다.

- 링크 과정은 위에서 설명한 4. 링커 를 통해,

오브젝트 코드 => 실행파일 로 변환한다.


* 인터프리터

- 어떤 대상을 다른 형태로 만들지 않고 바로 실행하는 프로그램

 

* 컴파일러 장점

- 컴파일을 한번만 해두면, 그대로 사용이 가능

- 기억장소의 크기 조정이 가능

- 전체 실행시간 면에서 매울 효율적

- 컴파일러는 매번 번역을 할 필요가 없음

 

* 컴파일러 단점

- 컴파일 과정이 복잡하고 시간이 많이 걸림

- 프로그램은 큰 기억용량을 요구

 

* 인터프리터 장점

- 프로그램이 될 때까지 소스코드의 형태를 유지하기 때문에 기억장소가 따로 필요없음

 

* 인터프리터 단점

- 원시 프로그램을 직접 실행하기에 이 실행에 필요한 소프트웨어가

항상 기계 안에 상주하면서 원시 프로그램의 명령들을 받아서 처리해야 함

- 위와 같은 과정을 반복하게 되면, 그 때마다 원시 프로그램을 해석하고 처리해야 하기 때문에 비효율적

=> 실행시간이 컴파일러 방법에 비해 비효율적

- 실행순서를 맞춰주어야 함(실행시간 설정을 해놓아야 함)

'Programming' 카테고리의 다른 글

C 문자열 함수 정리  (0) 2020.08.24
문제해결 및 실습 : C++(3학년 1학  (0) 2020.08.22