devkty 2025. 4. 18. 03:42
728x90

GCC에 대해서

[참고 사이트] https://80000coding.oopy.io/d5fa7c87-192f-4c68-95eb-aa4af5b9dbf5

GCC 관련 개념

GCC(GNU Compiler Collection): GNU 컴파일러 모음
GNU: GNU’s not Unix의 재귀 약자. 리처드 스톨먼이 각종 자유 SW들이 돌아가고 번영할 수 있는 기반 생태계를 구축하기 위해 시작한 프로젝트.

컴파일러: 번역기 같은 역할을 한다. 어떤 언어의 코드를 다른 언어로 바꿔주는 과정.

소스파일 실행파일 되는 모든 과정

과정: 전처리→ 컴파일 → 어셈블 → 링크단계
파일명: hello.c → hello.i → hello.s → hello.o


1. 전처리(hello.c → hello.i)

전처리기가 소스 파일 내의 전처리기 지시자를 처리.

#으로 시작하고 세미 콜론 없이 개행문자로 종료되는 라인을 의미
→ #include: 지정된 특정 파일의 내용을 해당 지시자가 있는 위치에 삽입
→ #define: 매크로 함수 및 상수 정의에 사용. 코드 내의 해당 상수를 프로그래머가 정의한 문자열로 대체

# 전처리 과정 실행
gcc -E main.c -o main.i

 

2. 컴파일(hello.i → hello.s)

전처리된 파일인 hello.i를 어셈블리어로 된파일 hello.s로 생성.

hello.s 어셈블리어란?
기계와 1:1로 대화하는 저급 언어이다. 바이너리 코드로는 소통이 힘들기 때문에 어셈블리어를 이용하여 만든다. 기계어는 컴퓨터 관점에서 바로 읽을 수 있으나 사람이 쓰기 불편함으로 보완해서 만든 언어이다.

# 컴파일 과정 실행 [ *.c -> (*.i) -> *.s ]
gcc -S main.c

 

3. 어셈블(hello.s → hello.o)

어셈블리어 파일 hello.s 를 기계어로 된 오브젝트 파일 hello.o 파일로 변환한다. 즉, 컴퓨터가 읽을 수 있는 0과 1로 이루어진 2진수 코드로 변환.

# 어셈블 과정 실행 [ *.c -> (*.i) -> (*.s) -> *.o ]
gcc -c main.c

 

4. 링크(hello.o → hello)

프로그램에서 사용하는 라이브러리를 가져와서 연결해서 실행파일로 만들어준다. 결과로 실행 가능한 파일을 생성한다.

컴파일러와 어셈블러

컴파일러: 전처리에서 컴파일해주는것이 컴파일러이다.
어셈블러: 어셈블리어를 기계어로 바꿔준다.

+컴파일에는 두 가지의 케이스가 있다.

보통의 컴파일은 전체 단계를 컴파일 과정이라한다. 근데 그 과정안에서 컴파일이라는 단계가 있어서 헷갈린다.

GCC 컴파일 방법

명령어 설명
gcc 파일명(.c) Default로 out 파일이 생성된다.(.out 이라는 파일이 생성되며 실행 가능)
gcc -c 파일명(.c) 오브젝트 파일을 생성함(*.o라는 오브젝트 파일이 생성됨)
gcc -c 오브젝트파일명(.o) 파일명(.c)  
gcc -o 실행파일명(.out) 오브젝트_파일명(.o) 실행 파일을 만든다.
gcc -o 실행파일 파일명(*.c) 실행 파일을 만듦 (바로 위 2줄을 간략화한 것)(소스 파일 컴파일 > 오브젝트 파일 생성 > 실행 파일 생성 > 오브젝트 파일 삭제)

GCC 컴파일 옵션

옵션 설명
-Wall 모든 모호한 코딩에 대해 경고를 보냄
-W 합법적이지만 모호한 코딩에 대해 경고를 보냄
-W -Wall 아주 사소한 모호성에 대해서도 경고를 보냄
-O2 최적화 레벨 2로 설정 (대부분의 최적화를 시도)
-E 전처리 과정의 결과를 화면에 보이는 옵션 (전처리 과정 중 발생한 오류 검증)
-S cc1으로 전처리된 파일을 어셈블리 파일로 컴파일까지만 수행하고 멈춤 (*.s)
-c as에 의한 어셈블까지만 수행하고 링크는 수행하지 않음
-v gcc가 컴파일을 어떤 식으로 수행하는지 화면에 출력
--save-temps 컴파일 과정에서 생성되는 중간 파일인 전처리 파일(.i)과 어셈블리 파일(.s)을 지우지 않고,현재 디렉토리에 저장 (오류 분석에 사용)

도커 GCC 관련된 내용은 다음 포스팅을 참고하세요!
https://devkty.tistory.com/entry/%EB%8F%84%EC%BB%A4%EC%97%90%EC%84%9C-GCC-%EB%8F%8C%EB%A6%AC%EB%8A%94-%EB%B2%95

728x90