1. GCC (GNU Compiler Collection)
ㅇ 리눅스(Linux) 환경에서, 각종 프로그래밍 언어 소스를 컴파일하기 위한 컴파일러 기능 제공 환경
- 컴파일 가능 언어 例) C, C++, Objective C, Fortran, Pascal, Ada, Java 등
- 실행가능 타깃 머신 例) Intel, ARM, PowerPC, Motorola, Sparc 등
2. GCC 특징
ㅇ gcc에 포함된 프로그램들
- cpp : 전처리기
- ccl : 컴파일러
- as : 어셈블러
- ld : 링커
* (소스 파일) -> 전처리기(cpp) -> 컴파일러(ccl) -> (어셈블리 파일) -> 어셈블러(as)
-> (오브젝트 파일, 기계어 형태) -> 링커(ld) -> (실행 파일)
ㅇ gcc 컴파일러는, 폭넓은 언어,타깃 머신들을 지원하기 위해, 모듈식으로 설계됨
- Front-end : 각 언어별로 Scanner, Parser 구현
- Mid-end : 코드 최적화(Code Optimization) 구현
- Back-end : 코드 생성(Code Generation)
- 최종 출력물은, 어셈블리 언어 형태 임
3. 사용 방식
ㅇ 옵션 例)
- v : 설치정보 및 버전
- o < 파일명 > : 출력을 지정한 명칭으로 저장
- E : 전처리 만 수행 (컴파일 x,어셈블 x), 그 결과를 표준 출력(stdout)에 보여 줌
- S : 컴파일까지 만 수행 (어셈블 x, 링킹 x)
. 어셈블리어로 된 파일(*.s) 형태로 출력
- c : 전처리,컴파일,어셈블 단계까지를 한꺼번에 수행 (링킹 x)
. 어셈블 단계
.. 컴파일 단계에서 만들어진 어셈블리어로 된 파일(*.s)을,
.. 기계가 직접 이해할 수 있는 기계어로 된, 재배치 가능한 오브젝트 파일(*.o)로 변환시킴
- g : 운영체제 고유 형식으로 디버깅 정보 만듬
- O1, O2, O3 : 코드 최적화
- std : 각 언어별 표준 심볼
- Wall : 발생 가능 모든 오류에 대한 경고
. 例) 헤더 파일 누락이 있으면, 그와 관련 함수 원형에 대해 추정을 했다고 경고하는 등
- l : 표준 라이브러리가 아닌 라이브러리를 사용하려고 할 때, 그 라이브러리를 지정해줌
. 例) gcc -o main main.o -lm (수학 라이브러리)
* gcc 컴파일러 옵션 온라인 보기 ☞ GCC Option Index
ㅇ 사용 例)
- gcc 소스파일.c => a.out : (-o 옵션 없으면, 실행 파일명이 a.out이 됨)
- gcc 소스파일.c -o 출력파일명 : (실행파일로써 출력파일명 지정)
- gcc 소스파일.c -S : (어셈블러파일.s 출력됨)
- gcc 소스파일.c -c : (오브젝트파일.o 출력됨)
- gcc object_file.o -o 출력파일명 : (오브젝트파일로부터, 실행파일이 출력됨)
- g++ 소스파일명 -o 출력파일명 : (C++ 언어 컴파일인 경우)