GCC 컴파일러란 ?
GCC
GNU 컴파일러 모음 (GNU Compiler Collection)의 약자이다. GNU 프로젝트의 일환으로 개발되어 널리 쓰이고 있는 컴파일러이다.
GNU란?
GNU는 GNU’s not UNIX 의 재귀약자로, 리처드 스톨먼이 각종 자유 소프트웨어들이 돌아가고 번영할 수 있는 기반 생태계를 구축하기 위해 시작한 프로젝트이다.
컴파일러란?
컴파일(Compile)은 어떤 언어의 코드를 다른 언어로 바꿔주는 과정을 말한다. 예를 들어, 사람이 인식하고 이해할 수 있는 C언어 코드를 컴퓨터가 이해할 수 있는 기계어로 바꿔주는 것이다.
즉, 컴파일러(Compiler)는 어떤 프로그래밍 언어로 쓰여진 소스 파일을 다른 언어로 바꾸어주는 번역기이다.
GCC 컴파일 과정
전처리 단계 -> 컴파일 단계 -> 어셈블 단계 -> 링크 단계
gcc hello.c 명령어를 입력하면 네 가지 단계를 거쳐서 실행 파일이 생성되지만, 각 단계의 파일들은 임시 파일로 생성되었다가 사라진다.
1. 전처리 단계
전처리기가 소스 파일 내의 전처리기 지시자를 처리한다.
전처리기 지시자란?
# 으로 시작하고 세미콜론 없이 개행문자로 종료되는 라인을 의미한다.
- #include : 지정된 특정 파일의 내용을 해당 지시자가 있는 위치에 삽입
- #define : 매크로 함수 및 상수 정의에 사용한다. 코드 내의 해당 상수를 프로그래머가 정의한 문자열로 대체한다.
참고자료 : 전처리기와 분할 컴파일
이렇게 전처리 단계를 거치면 소스 파일 hello.c 에서 확장 소스 파일인 hello.i 가 생성된다.
# 전처리 과정 실행
gcc -E main.c -o main.i
2. 컴파일 단계
전처리된 파일인 hello.i 로부터 어셈블리어로 된 파일인 hello.s 파일을 생성한다.
# 컴파일 과정 실행 [ *.c -> (*.i) -> *.s ]
gcc -S main.c
https://hwan2story.tistory.com/4
어셈블리어란 ? ( 간단한 문법 소개 )
어셈블리어(Assembly language) 컴퓨터의 하드웨어를 직접 다루기 위해 개발된 저급 프로그래밍 언어 어셈블리어에서는 기계어 명령어 하나당 하나의 명령문이 있으며, 이 명령문은 CPU에서 직접 실
hwan2story.tistory.com
3. 어셈블 단계
어셈블리어 파일 hello.s 를 기계어로 된 오브젝트 파일 hello.o 파일로 변환한다. 즉, 컴퓨터가 읽을 수 있는 0과 1로 이루어진 2진수 코드로 변환하는 것이다.
# 어셈블 과정 실행 [ *.c -> (*.i) -> (*.s) -> *.o ]
gcc -c main.c
4. 링크 단계
링크 단계는 작성한 프로그램이 사용하는 다른 프로그램이나 라이브러리를 가져와서 연결하는 과정이다. 그 결과로 실행 가능한 파일을 생성한다. (hello.o → hello)
# 링크 단계 [ *.c -> (*.i) -> (*.s) -> (*.o) -> excutable ]
gcc -o main main.c func.c
GCC 컴파일 옵션
-o [파일명] [*.c] : 지정한 파일명으로 실행 파일을 저장한다.
ex) gcc -o result.out main.c
-E : 전처리 단계를 수행한 후, 컴파일 과정을 거치지 않는다.
실행 결과는 standard output에 출력된다.
-S : 컴파일 단계를 수행한 후, 어셈블 과정을 거치지 않는다.
실행 결과로 어셈블리어로 변환된 *.s 파일이 생성된다.
-c [파일명] [*.c] : 소스 코드를 컴파일 또는 어셈블하며, 링크를 하지 않는다.
파일명으로 오브젝트 파일을 생성한다.
ex) gcc -c ft_isalnum.c
-I [디렉토리명] : 디렉토리명에서 헤더 파일을 검색한다.
-l [라이브러리] : 라이브러리 파일과 링크한다. 접미사나 확장자(.a/.o)가 없어도 링크한다.
ex) 라이브러리 파일이 libmath.a 일때 다음과 같이 작성
gcc myfile.c -lmath -o myfile
-L [디렉토리명] : 디렉토리 내에서 라이브러리 파일을 찾는다.
-D [매크로상수명]=[값] : 매크로 상수를 정의하기 위한 옵션이다.
ex) gcc -D BUFFER_SIZE=42 : BUFFER_SIZE 라는 매크로 상수의 값을 42로 설정한다.
출처 :
[8주차] 전처리기와 분할 컴파일
전처리기와 분할 컴파일 전처리pre-processing 컴파일러가 소스 파일을 컴파일하기 이전 과정으로 전처리기 지시자(#)를 사용함. 프로그램이 전처리 되는 과정은 소스파일(*.c)과 헤더 파일(*.h)을 사
skyil.tistory.com
https://80000coding.oopy.io/d5fa7c87-192f-4c68-95eb-aa4af5b9dbf5
[GCC] GCC 컴파일러 개념 정리
목차
80000coding.oopy.io
GCC - 나무위키
이 저작물은 CC BY-NC-SA 2.0 KR에 따라 이용할 수 있습니다. (단, 라이선스가 명시된 일부 문서 및 삽화 제외) 기여하신 문서의 저작권은 각 기여자에게 있으며, 각 기여자는 기여하신 부분의 저작권
namu.wiki