OS_Linux&Unix

[Unix/Linux] GCC / CC 란 무엇인가?

최선을 다하자! 2022. 8. 16. 13:10

GCC  ?

 

GNU 컴파일러 모음 (GNU Complier Collection)의 약자

GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 컴파일러

 

원래는 C만 지원했던 이유로 GNU C Compiler 였는데, 현재는 C++, Java, Fortran, Ada 등 여러 언어를 compile 할 수 있게 되면서, 현재의 이름으로 바뀌게 되었다.

 

Java는 7.1부터 지원 종료되었고, 현재 공식적으로 지원하는 언어는 C, C++, Objective-C, Fortran, Ada, Go 가 있다.

 

 

 

GNU 란 ?

GNU는 GNU's Not Unix의 약자로, 리처드 스톨먼이 각종 자유 소프트웨어들이 돌아가고 번영할 수 있는 기반 생태계를 구축하기 위해 시작한 프로젝트임.

 

Compiler 란 ? 

Compile은 어떤 언어의 코드를 다른 언어로 바꿔주는 과정을 말한다.

예를 들어, 사람이 인식하고 이해할 수 있는 C언어 코드를 컴퓨터가 이해할 수 있는 기계어로 바꿔주는 것.

 

쉽게 말하자면, 어떤 프로그래밍 언어로 쓰여진 소스 파일을 다른 언어로 바꿔주는 번역기 역할.

 

 

CC 란 ?

 

말 그대로 C언어를 기계어로 바꿔주는 Compiler

 

즉, C언어 컴파일러 모두를 CC 라고 부름.

 

특히 리눅스에서는 CC와 GCC가 심볼릭 링크로 연결되어 있기 때문에 리눅스 상에서는 CC = GCC 임

 

 

 

 

GCC 동작 과정 

 

1. 전처리 과정 : 전처리기인 cpp0에 의해 .i 파일 생성

2. 컴파일 과정 : C 컴파일러인 cc1를 통해.s 파일 생성

3. 어셈블 과정 : 어셈블러인 as에 의해서 .o 파일 생성

4. 링킹 과정 : 링커인 collect2를 통해서 실행 파일 생성

 

 

GCC 명령어 

 

--help : 간단한 옵션을 출력해줍니다.
--version : gcc의 버전을 출력해 줍니다.

-o : 출력 파일명을 지정할 때 사용합니다.
-c : 링킹 과정을 진행하지 않고 .o 파일인 오브젝트 파일까지만 생성 하게 됩니다.
-S : 어셈블러까지 진행 하지 않고, 컴파일러까지의 출력은 .S 어셈블러 파일을 생성하게 됩니다.
-O1 ~ -O3 : 최적화 수준을 지정합니다. 숫자가 클수록 높은 수준의 최적화를 하게 됩니다.
-g : 디버깅을 위한 정보를 컴파일하면서 생성하게 됩니다.
-D : define을 할 수 있는 옵션입니다.
-l (엘) : 라이브러리 이름을 지정합니다.
-L : 추가 라이브러리 디렉터리를 지정합니다.
-W : 모든 에러 메시지 출력
-w : 모든 에러 메시지를 출력하지 않음
-I(아이) : 추가 헤더 파일이 있는 디렉터리를 지정합니다.

 

 

 

 

이 정도만 알아두면 될 것 같다.

 

 

 

 

출처 

 

https://kimdora.tistory.com/entry/GCC-%EB%8F%99%EC%9E%91-%EA%B3%BC%EC%A0%95

https://yoonchang.tistory.com/9