[CS : 컴퓨터 구조] C 언어의 컴파일 과정
Computer Science/컴퓨터 구조

[CS : 컴퓨터 구조] C 언어의 컴파일 과정

C 언어의 컴파일 과정

1) 전처리기(preprocessor)

  • ( test.c → test.i ) 전처리(preprocess)과정을 실행
  • 전처리 과정 (preprocessing)
    • 본격적으로 컴파일하기 전에 처리할 작업들
    • 외부에 선언된 다양한 소스코드, 라이브러리 포함(e.g. #include)
    • 프로그래밍의 편의를 위해 작성된 매크로 변환(e.g. #define)
    • 컴파일할 영역 명시(e.g. #if, #ifdef, ···) 

2) 컴파일러(compiler)

  • ( test.i  →  test.s ) 컴파일(compile)과정을 실행
  • 컴파일 과정(compiling)
    • 전처리가 완료 되어도 여전히 소스코드이다.
    • 전처리 완료된 소스코드를 저급 언어(어셈블리 언어)로 변환

3) 어셈블러(asembler)

  • ( test.s → test.o ) 어셈블(assemble)과정을 실행
  • 어셈블 과정(assembling)
    • 어셈블리어를 기계어로 변환
    • 목적 코드(object file)를 포함하는 목적 파일이 됨
더보기

목적 파일 vs 실행 파일

  • 목적 파일과 실행 파일은 둘 다 기계어로 이루어진 파일이다.
  • 목적 파일은 링킹(linking)을 거친 이후에야 실행 파일이 된다.
  • 링킹이란 각기 다른 목적 코드를 하나의 실행 파일로서 묶어주는 작업 즉 연결 시켜주는 작업이다.

4) 링커(linker)

  • ( test.o → test.exe ) 링킹(linking)과정을 실행
  • 링킹이란 각기 다른 목적 코드를 하나의 실행 파일로서 묶어주는 작업 즉 연결 시켜주는 작업이다.
  • ex) test.o 라는 목적 파일에 test1.o 라는 목적 파일에 있는 코드가 필요하다면 두가지를 연결시켜주어야 실행시킬수 있는 실행파일이 되기 때문에 이를 위한 과정이 링킹이다. 

 

 

 

 

출처: 인프런-개발자를 위한 컴퓨터공학 1: 혼자 공부하는 컴퓨터구조 + 운영체제
https://www.inflearn.com/course/%ED%98%BC%EC%9E%90-%EA%B3%B5%EB%B6%80%ED%95%98%EB%8A%94-%EC%BB%B4%ED%93%A8%ED%84%B0%EA%B5%AC%EC%A1%B0-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C/dashboard