[Unix/Linux] GCC / CC 란 무엇인가?
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