Language/C, C++, C#

[C] 프로그램 실행 과정 (빌드 과정)

byunghyun23 2020. 6. 8. 01:43

C언어 프로그램의 실행 과정은 다음과 같다.

 

C언어 프로그램 실행 과정 (Windows)

 

 

  1. 컴파일러 (Compiler)

    1. 전처리 (Preprocess)

      • 컴파일러가 쉽게 인식할 수 있도록 소스 코드 내부에 "#"으로 시작되는 명령어 재정리

        (#define MAX 100이라고 선언했을 경우, 소스에서 MAX라고 쓰여있는 부분을 100으로 치환)

      • hello.c 파일을 입력으로 hello.i 파일 생성

    2. 컴파일 (Compile)

      • 전처리된 소스 코드를 어셈블리어로 변환

      • hello.i 파일을 입력으로 hello.s 파일 생성 

         

        어셈블리 코드
    3. 어셈블 (Assemble)

      • 어셈블리어를 기계어(binary)로 변환

      • hello.s 파일을 입력으로 hello.o 파일 생성

  2. 링커 (Linker)

    • 목적 파일을 관련된 라이브러리와 연결하여 실행 파일 생성

    • hello.o 파일을 입력으로 hello.exe 파일 생성

 

※ 컴파일과 어셈블이 필요한 이유

프로그래머가 고급 언어(C, JAVA 등)를 이용하여 작성한 코드는 CPU가 실행 할 수 없다.

CPU는 0,1과 같이 이진 코드로 작성된 파일만 실행 할 수 있기 때문이다.

 

하지만 프로그래머가 직접 이진 코드를 작성하는 것은 매우 까다로운 일이다.

여기서 어셈블리 코드를 사용하는 이유를 알 수 있다.

프로그래머는 이진 코드와 매핑된 명령어 이름(어셈블리)을 이용하여 로직을 작성 할 수 있다.

그러나 어셈블리 코드 작성 또한 까다롭다.

 

고급 언어로 코드를 작성한 후 컴파일(Compile), 어셈블(Assemble) 과정을 거친다면

좀 더 편하게 프로그램을 만들어 낼 수 있다.

 

 

※ 링킹이 필요한 이유

어셈블(Assemble) 과정을 마친 후 얻은 목적 파일은 직접 실행할 수 없는 파일이다.

표준 라이브러리 및 사용자 라이브러리를 포함하고 있지 않기 때문이다.

링킹을 통해 필요한 라이브러리를 목적 파일과 연결하는 과정이 끝나면 실행 가능한 exe파일이 생성된다.

( printf(), scanf()와 같은 표준 라이브러리는 별도로 링크하지 않아도 미리 컴파일 되어있기 때문에 자동으로 링크 )

 

 

※ Compile + Linking = Build

Visual Studio에서 디버깅 하지 않고 시작(Ctrl + F5)을 하게 되면

빌드 과정(F7)을 거쳐 실행 파일을 생성한 후 실행하게 된다.

여기서 빌드 과정이란 컴파일(Ctrl + F7)과 링킹 과정을 합한 것을 말한다.