본문 바로가기

컴퓨터시스템

GCC(GNU Compiler Collection)란?

728x90

 

 

GCC는 GNU 컴파일러 모음(GNU Compiler Collection)을 줄여서 부르는 명칭이다.

 

 GNU 프로젝트는 여러 소프트웨어들이 자유롭게 돌아갈 수 있는 기반 생태계를 구축하기 위해 시작한 프로젝트다.

 gcc는 GNU 프로젝트의 일환으로,  1987년 GNU 프로젝트의 컴파일러를 위해  리처드 스톨만이  작성, 개발하여 현재까지 널리 쓰이고 있는 컴파일러다. 원래는 C언어만을 지원했지만, 현재는 C++, Java, Fortran 등 여러 언어를 컴파일 할 수 있게 되었다. gcc는 1997년 개발 과정을 공개, 1999년 첫 버전이 나왔다.

 

컴파일러란, 어떤 언어의 코드를 다른 언어로 바꿔주는 과정을 말한다. 예를 들어 사람이 작성한 C언어를 컴퓨터가 이해할 수 있는 기계어로 바꿔주는 컴파일(Compile) 과정을 해주는 번역기이다.

 

gcc 컴파일러로 진행하는 컴파일 과정은 아래 그림과 같다.

출처 - https://code-lab1.tistory.com/368 (코드연구소)

  1. 전처리 -> 전처리기
  2. 컴파일 -> 컴파일러
  3. 어셈블 -> 어셈블러
  4. 링크 -> 링커

gcc hello.c 명령어를 입력하면 위 네 단계를 거쳐 실행 파일이 생성된다.

 

 

한 단계씩 코드와 함께 살펴보자.

1.

# 전처리 과정
gcc -E hello.c -o hello.i

전처리 과정을 거치면 소스 파일 hello.c 파일에서 확장 소스 파일인 hello.i 가 생성된다.

 

2.

# 컴파일 과정 [ .c -> (.i) -> .s ]
gcc -S hello.c

컴파일 과정을 거치면 hello.i 로부터 어셈블리어로 작성된 hello.s 파일이 생성된다.

 

3.

# 어셈블 과정 [ .c -> (.i) -> (.s) -> .o ]
gcc -c hello.c

어셈블리어 파일을 어셈블러가 읽어 기계어로 번역, hello.o 라는 오브젝트 파일로 변환한다. 이 파일은 컴퓨터가 읽을 수 있는 2진수 코드로 변환된 것이다.

 

4.

# 링크 단계 [ .o -> excutable(.exe) ]
gcc -o hello hello.c func.c    # <- 외부 소스 파일

링크 단계에서는 작성한 프로그램이 사용하는 다른 프로그램이나 라이브러리를 링커가 연결한다. 그 결과로 생성된 파일이 실행 가능한 hello(.exe) 파일이다.

 

 

 


GCC 컴파일러의 여러 옵션

-o [파일명] [*.c] : 지정한 파일명으로 실행 파일을 저장한다.
	ex) gcc -o result.out main.c
-E : 전처리 단계를 수행한 후, 컴파일 과정을 거치지 않는다.
	실행 결과는 standard output에 출력된다. 파일 (*.i)을 저장하려면 -o 옵션과 함께 사용
-S : 컴파일 단계를 수행한 후, 어셈블 과정을 거치지 않는다.
	실행 결과로 어셈블리어 .s 파일이 생성된다.
-c [파일명] [*.c] : 소스 코드를 컴파일 또는 어셈블하며, 링크를 하지 않는다.
				파일명으로 오브젝트 파일을 생성한다
                ex) gcc -c object main.c
-l [라이브러리] : 라이브러리 파일과 링크한다. 접미사나 확장자(.a/.o)가 없어도 링크함.
				ex) gcc mytest.c -lcalc -o mytest

-D [지정할상수명]=[값] : 상수를 정의하기 위한 옵션.
	ex) gcc -D SIZE=42 : SIZE라는 이름의 상수의 값을 42로 설정한다.
    

-I [디렉토리명] : 디렉토리명에서 헤더 파일을 검색한다.

-L [디렉토리명] : 디렉토리 내에서 라이브러리 파일을 찾는다.

주로 -o 옵션을 사용하게 될 것 같다.

 

 

아래는 -E, -S, -c를 실행한 결과를 캡쳐한 것이다.

 

-E 명령어를 실행했을 때 출력되는 화면
-S 명령어를 실행했을 때 생성된 .s 파일
-S로 생성된 어셈블리어 파일 내용

 

-c 명령어 결과인 .o 파일의 실행 일부

화질이 너무 구리다;;

 

 

 


출처

 

[GCC] GCC 컴파일러 개념 정리

 

[GCC] GCC 컴파일러 개념 정리

목차

80000coding.oopy.io

gcc 란?

 

gcc 란?

gcc란 무엇일까 gcc란? GNU 컴파일러 모음(GNU Compiler Collection, 줄여서 GCC)는 GNU 프...

blog.naver.com

[Linux] 리눅스 gcc란? gcc로 C언어 컴파일하기

 

[Linux] 리눅스 gcc란? gcc로 C언어 컴파일하기

GCC란? GCC는 GNU 컴파일러 모음(GNU Compiler Collection)이다. GNU는 운영 체제의 하나이자 컴퓨터 소프트웨어의 모음집이다.(참고1) 현재 대부분 GNU와 LINUX를 결합하여 사용하기 때문에 이 조합을 짧게 "Li

code-lab1.tistory.com