Skip to content

GCC의 4단계 컴파일

GCC(GNU Compiler Collection, GNU 컴파일러 모음)은 GNU 프로젝트로 관리되고 있는 컴파일러이다. C언어만을 대상으로 하던 당시에는 GNU C Compiler의 약어였으나, C++과 여타 다른 언어를 지원하면서 현재의 의미로 변경되었다.

컴파일 과정

flowchart
    a[Source Code]
    b[Preprocessor]
    c[Compiler]
    d[Assembler]
    e[Linker]
    f[Executable File]

    subgraph g[GCC Compiler]
        b --> |.i .ii| c
        c --> |.s| d
        d --> |.o| e
    end

    a --> |.c .cpp| g --> |.exe .out| f

GCC는 여러 도구를 모아둔 일종의 툴 체인이다. 전처리기, 컴파일러, 어셈블러 그리고 링커를 거쳐 실행 가능한 파일을 생성할 수 있도록 돕는다. 이러한 과정은 프로그램 실행 과정의 컴파일 타임과 로드 타임에 해당된다.

gcc main.exe main.c

GCC를 사용하여 main.c라는 소스코드를 main.exe라는 실행파일로 컴파일하는 명령어는 다음과 같다.

구성요소

전처리기(Preprocessor)

전처리기는 다음과 같은 과정을 거쳐 소스코드에 헤더 파일을 삽입하거나 매크로를 확장한다.

  • #이 붙은 문장 처리
    • 헤더 파일 삽입(#include)
    • 매크로 정의(#define)
    • 조건부 지시문(#ifdef)
  • 필요 없는 주석 제거

명령어

gcc -E main.i main.c

main.c라는 소스코드를 main.i라는 전처리가 완료된 코드로 번역

컴파일러(Compiler)

고급 프로그래밍 언어로 작성된 소스코드를 어셈블리어로 번역한다.

명령어

gcc -S main.s main.i

main.i라는 전처리가 완료된 코드를 main.s라는 어셈블리 코드로 번역

어셈블러(Assembler)

어셈블리어를 기계가 해석할 수 있는 오브젝트 파일로 번역한다.

명령어

gcc -c main.o main.s

main.s라는 어셈블리어를 main.o라는 오브젝트 파일로 번역

링커(Linker)

여러 오브젝트 파일정적 라이브러리를 연동하여 하나의 실행파일로 만든다.

명령어

gcc -o main.exe main.o

main.o라는 오브젝트 파일을 main.exe라는 실행 파일로 링크


Last update : 23 mai 2023
Created : 17 mai 2023