짱짱이_ 2024. 1. 1. 17:26

 

  • 전처리기 (Preprocessor)
    • 본격적으로 컴파일하기 전에 처리할 작업들
    • 외부에 선언된 다양한 소스 코드, 라이브러리 포함 (#include) 라이브러리 소스들을 진짜로 가져오는 과정이라고 생각하면 된다.
    • 프로그래밍의 편의를 위해 작성된 매크로 변환 (#define)
    • 컴파일할 영역 명시 (#if, #ifdef)
    • 확장자 변환: test.c → test.i
gcc hongong.c  // gcc컴파일러 이용, ./a.out 이라는 실행파일이 생성된다.

gcc -E hongong.c -o hongong.i 의 결과



  • 컴파일 과정 (Compiling)
    • 전처리가 완료되어도 여전히 소스 코드
    • 전처리가 완료된 소스 코드를 저급 언어(어셈블리 언어)로 변환
gcc -S hongong.i -o hongong.s

어셈블리어로 변환한 결과, CPU마다 다를 수 있다.

 

 

  • 어셈블 과정 (Assembling)
    • 어셈블리어를 기계어(컴퓨터가 알아들을 수 있는 0과 1로)로 변환
    • 목적 코드(object file)를 포함하는 목적 파일이 된다.
gcc -o hongong.o -o hongong.s

위, 아래 같은 코드이다.

 

 

  • 링킹 (Linking)
     
    • main.c에 helper.c에 있는 내용이 필요하다고 하면 main.o와 helper.o를 연결시켜주어야 한다. 이렇게 서로 다른 목적 코드를 연결해 실행 파일로 묶어주는 과정을 ‘링킹’이라 한다.