C언어의 빌드 과정

koyo·2020년 11월 26일
0

프로그래밍 언어

목록 보기
12/12

프로그래밍을 처음 접할 때 만나는 첫 예제는 Hello World 출력이다.
해당 예제의 빌드 과정을 살펴보자.

#include <stdio.h>
int main() {
	printf("Hello World!");
    return 0;
}

실제 우리가 하는 빌드를 해보자.

일단 gcc로 빌드를 해보자. 먼저 앞의 예제 코드를 포함한 hello.c 파일을 만든다.
그 후, gcc hello.c -o hello 를 통해 실행파일 hello를 생성한다.
./hello를 통해 해당 파일을 실행하자.

단 한 줄의 명령어로 실행파일이 만들어졌다. 하지만 실제로는 다양한 과정이 필요하다.

실제 이루어지는 빌드 과정을 살펴보자

자료 출처 : C언어 빌드 과정 with gcc - 서준수

빌드 과정은 여러 중간 단계를 거친다. gcc 옵션을 통해 각 단게별로 결과를 확인할 수 있다.
컴파일러인 gcc는 다음과 같이 각 단계에 적합한 툴을 호출한다.

  • 전처리(Process) : cpp
  • 컴파일(Compile) : cc1
  • 어셈블(Assemble) : as
  • 링크(Link) : id

GCC 명령어 전반에 대한 Docs

전처리(Preprocess)

헤더 파일을 포함하고 매크로 확장을 하는 단계이다. 매크로 확장은 매크로 생성이라고도 한다. 즉 당므과 같은 구문을 처리하는 것이다.

전처리기는 cpp를 활용한다.

#include <stdio.h> // 헤더 파일 추가
#define MAX_NUM = 100 // 매크로

gcc 명령으로는 gcc -E hello.c -o hello.i로 확인할 수 있다. 이를 통해 hello.i라는 파일을 생성한다.

컴파일(Compile)

전처리된 파일을 컴파일하는 과정이다. 컴파일이란 작성한 프로그램 코드를 컴퓨터가 이해할 수 있는 언어로 변환하는 작업이다.
gcc는 cc1라는 툴에 의해 어셈블리 코드 파일(.s) 파일이 생성된다.
이를 위해 gcc -S hello.i라는 명령어를 사용한다.

어셈블(Assemble)

어셈블 단계에서는 컴파일하여 만들어진 어셈블리 코드를 기계어 형태로 번역해준다.
이를 통해 2진수 기계어로 되어있는 오브젝트 파일(.o)을 생성한다.

명령어는 gcc -c hello.s 이다.

생성된 오브젝트 코드와 실행에 필요한 (static) 라이브러리가 있으면 연결된다.

명령어는 gcc hello.o -o hello 이다.

이를 통해 실행파일이 생성된다.

profile
클라우드 개발자가 될 코요입니다.

0개의 댓글