본문 바로가기
System/Linux

<Linux> gcc 동작 과정

by Coding_WONI 2022. 4. 15.

리눅스에서는 C 언어의 코드를 컴파일 하기 위하여 gcc 명령어를 사용한다.

gcc는 아래의 프로그램을 차례대로 수행한다.

 

[표1] gcc가 실행시키는 프로그램

cpp 전처리기
cc1 컴파일러
as 어셈블리
ld 링커

[그림] gcc 동작 과정

1. 전처리 단계

  • cpp는 소스 파일의 #include와 #define과 같은 #으로 시작하는 전처리기 부분 처리
  • 필요한 해더 파일을 삽입, 실행 문장의 매크로를 상수로 변환
  • file.c(소스파일)이 전처리기를 거쳐 file.i가 생성되지만 디스크에 저장은 안 됨

전처리 단계

2. 컴파일 단계

  • file.i가 컴파일러를 거쳐 file.s가 생성되지만 바로 어셈블 단계가 실행되므로 디스크에 저장은 안 됨

컴파일 단계

3. 어셈블 단계

  • file.s(소스파일)이 어셈블러를 거쳐 file.o(오브젝트 파일)가 생성
  • 오브젝트 파일: 기계가 직접 이해할 수 있는 기계어로 된 파일

어셈블 단계

4. 링크 단계

  • 라이브러리 함수와 오브젝트 파일들을 연결해 실행 파일을 생성

링크 단계

5. 파일 확장자에 따른 처리 방법

확장자 종류 처리 방법
.c C 소스 파일 gcc로 전처리, 컴파일, 어셈블, 링크
.C .CC C++ 소스 파일 g++로 전처리, 컴파일, 어셈블, 링크
.i 전처리된 C 파일 gcc로 컴파일, 어셈블, 링크
.ii 전처리된 C++ 파일 g++로 컴파일, 어셈블, 링크
.s 어셈블리어로 된 파일 어셈블, 링크
.S 어셈블리어로 된 파일 전처리, 어셈블, 링크
.o 오브젝트 파일 링크
.a .so 컴파일된 라이브러리 파일 링크

 

※ 이 글은 책 "초보자를 위한 Linux&Unix C 프로그래밍"을 기반으로 작성하였습니다.