2.1) 컴파일 & 링크 & 빌드
초창기의 컴퓨터는 기계어로 프로그래밍을 했다. 그러나 기계어는 사람이 이해하기 아주 어려워서, 이를 보다 편하게 사용하기 위해 이런 방법을 생각했다.
- 기계어의 집합을 더 간단하게 표현하는 텍스트 문서를 만든다. 예를 들어 C는 긴 코드를 간단하게 표현하기 위해 함수나 매크로(macro)를 사용할 수 있는데, 기계어로 10줄짜리의 코드를 매크로 A로 정의하고 문서에는 A만 써넣는 경우를 생각하자.
- 이 텍스트 문서를 기계어로 자동 번역하는 프로그램 A를 만든다.
- 텍스트 문서를 프로그램 A를 이용하여 기계어로 자동 번역한다. 이 프로그램을 실행하면 위에서 예시로 작성한 문서의 A가 기계어 10줄로 번역된다.
이렇게 하면 필요할 때마다 텍스트 문서만 수정하여 프로그램을 간단하게 만들 수 있다. 위 내용은 사실 순서가 이상한데, 다시 한 번 순서를 맞춰보자.
- 일정한 형식으로 작성된 문서를 기계어로 자동 번역하는 프로그램 A를 먼저 만든다.
- 이후에 프로그램을 만들 때마다 A가 번역할 수 있도록 일정한 형식으로 문서를 작성한다.
- 문서 작성이 완료되면 프로그램 A를 실행하고 파일을 넘겨서, A가 자동으로 번역해준 기계어 파일을 얻게 된다.
그리고 바로 여기서 사용되는 프로그램 A를 컴파일러(compiler)라고 하고, 이때 작성한 일정한 형식의 컴퓨터 명령을 소스 코드(source code), 소스 코드가 저장된 텍스트 파일을 소스 코드 파일(source code file) 또는 간단히 소스 파일(source file), 그리고 이를 번역하는 행위를 컴파일(compile)이라고 한다.
컴퓨터가 발전하고 작성하는 소스 코드의 양이 늘어남에 따라, 한 파일에 모든 소스 코드를 작성하는 방식이 불편하다는 것을 깨닫게 되었다. 사람들은 소스 코드를 다른 파일에 분리하는 방법을 생각해냈다. 원래 하나였던 파일을 분리했으므로, 프로그램을 완성하려면 분리했던 파일은 모두 연결해야 한다. 이렇듯 분리된 파일을 모아 하나의 실행 가능한 파일을 만들면 이를 두고 파일들을 링크(link)했다고 하고, 이때 사용되는 프로그램을 링커(linker)라고 한다.
종합하면, 우리는 기계어를 이용하지 않고 실행파일을 생성하기 위해 다음의 순서를 거친다.
- 소스코드를 작성하고 파일로 저장한다.
- 저장한 소스파일을 컴파일러를 이용하여 컴파일 한다. 목적파일이 생성된다.
- 컴파일러가 생성한 목적 파일들을 링커를 이용하여 링크 한다. 실행 가능한(excutable) 목적파일이 생성된다.
링커는 실행 가능한 ‘목적’ 파일을 생성한다. 컴파일러가 생성하는 파일과 링커가 생성하는 파일의 차이는 생성한 목적 파일이 실행 가능 하느냐에 있다.
컴파일과 링크 과정을 합쳐 빌드(build)라고 하고, 이때 사용되는 프로그램을 빌더(builder)라고 한다.
'운영체제' 카테고리의 다른 글
[운영체제] 운영체제 내부구조 및 설계원리 제8판 | Part2 프로세스 (수정) (0) | 2023.02.02 |
---|---|
[운영체제] 커널(Kernel) (0) | 2023.01.14 |
[운영체제] 파일시스템 (File System) (0) | 2020.09.08 |
[Linux] fork (0) | 2020.08.06 |
[리눅스] 2020-07-14 도커 메모 (0) | 2020.07.14 |