Myo-Kyeong Tech Blog

[ 리눅스 ] C언어 GCC 컴파일 과정( Ubuntu 20.04 ) - Preprocessing, Compilation, Assembly, Link 본문

리눅스

[ 리눅스 ] C언어 GCC 컴파일 과정( Ubuntu 20.04 ) - Preprocessing, Compilation, Assembly, Link

myo-kyeong 2023. 5. 23. 20:47
728x90
반응형

 

C언어 컴파일 과정은 크게 전처리(Preprocessing), 컴파일(Compilation), 어셈블(Assembly), 링크(Link) 4단계로 나눌 수 있습니다. 

 

[ helloworld.c 파일 생성 ]

nano helloworld.c
#include <stdio.h>

int main() {
    printf("Hello, World!\n");
    return 0;
}

 

전처리 ( Preprocessing )

  • #define, #include 와 같은 전처리 지시어를 처리
  • #include <stdio.h> : 컴파일러에게 stdio.h라는 헤더 파일의 내용을 현재 위치에 삽입하도록 지시
  • 'helloworld.i' 파일 생성
gcc -E helloworld.c -o helloworld.i

 

컴파일 ( Compilation )

  • 전처리된 소스 코드를 받아 어셈블리 코드로 변환
  • 코드의 문법 오류를 체크하고 이상이 있다면 오류 메시지 출력하고 컴파일 중지
  • 'helloworld.i' 파일이 컴파일되어 'helloworld.s' 파일 생성
gcc -S helloworld.i -o helloworld.s

 

[ helloworld.s 어셈블리 코드 ]

 

어셈블 ( Assembly )

  • 어셈블리 코드가 기계어 코드로 변환
  • 'helloworld.o' 오브젝트 파일 생성
gcc -c helloworld.s -o helloworld.o

 

링크 ( Linking )

  • 오브젝트 파일과 라이브러리를 링크하여 실행 가능한 파일 생성
  • 'helloworld.o' 오브젝트 파일 링크되어 'helloworld' 실행 파일 생성
gcc helloworld.o -o helloworld

 

./helloworld

728x90
반응형