본문 바로가기
멀티코어 프로그래밍/Basic

gcc 컴파일러

by 기리의 개발로그 2022. 3. 29.

gcc

확장자

  • C 프로그래밍에서 확장자별 파일의 역할
확장자 역할
.a 정적 라이브러리
.c 원본 C 코드. 전처리 과정이 필요함
.h C 코드 헤더 파일
.i 중간 C 코드. 전처리 과정이 필요하지 않음
.o 오브젝트 파일. 링킹 과정이 필요함
.s 어셈블리 코드. 컴파일 과정에서 확인 가능
.so 공유 라이브러리
.c ------> .i \------> .s \------> .o \------> .exe

옵션

-v

  • 현재 gcc 컴파일러의 버전을 확인하기 위한 옵션


-o

  • gcc 컴파일러는 일반적으로 a.out이라는 실행 파일 생성

  • gcc 컴파일러 결과 파일의 이름 지정

    • ex) gcc -o test test.c

-E

  • 컴파일 과정 중 C 전처리 과정까지 수행
  • #include, #define 등의 전처리문을 C 코드로 치한
  • C 언어 소스 코드가 복잡한 선택적 컴파일 수행 시 코드 확인
  • #ifndef, #define 등 복잡한 전처리문이 포함된 소스 코드
  • 전처리 과정에 의해 컴파일 에러가 나는 경우 코드 확인
  • 사용법
    • ex) gcc -E ex1.c


-s

  • 컴파일 과정 중 C 컴파일 과정까지 수행
  • C 언어 코드로 이루어진 원시코드를 어셈블리 코드로 컴파일
  • 어셈블리 코드를 확인할 수 있음
  • 스택 프레임의 관리를 직접 확인할 수 있음
  • 사용법
    • ex1) gcc -S ex1.c
  • ex1.s 파일을 통해 어셈블리 코드 확인 가능
    • ex2) gcc -S -o ex ex1.c
  • ex 로 어셈블리 코드 확인 가능


-c

  • 컴파일 과정 중 어셈블리 과정까지 수행

  • 링킹은 하지 않는다.

  • 다수의 소스로 이루어진 프로그램에서 유용하게 사용

  • 다수의 소스 파일의 오브젝트 파일을 생성

  • 사용법

    • ex1) gcc -c ex1.c
  • ex1.o 파일을 통해 오브젝트 코드 확인 가능

    • ex2) gcc -c -o ex ex1.c
  • ex 로 오브젝트 코드 확인 가능


-I [Directory]

  • 소스에 포함된 허데 파일을 검색하기 위한 디렉토리 추가
  • 공백없이 디렉토리 경로와 I를 붙여서 써야 함
  • 여러 디렉토리 지정 가능
  • 다수의 파일로 이루어진 프로젝트 관리 시 주로 사용


-D [macro], -D [macro]=[define]

  • 특정 매크로를 define 할 수 있는 옵션

  • C 코드의 #define 전처리문과 동일하게 작동

  • -D__KERNEL__ 은 #define KERNEL 과 동일

  • -DMAXLEN=255 는 #define MAXLEN 255와 동일


W [option]

  • 경고 메세지와 관련된 옵션

  • [option]의 종류

    • all : 컴파일 도중 발생하는 모든 경고 메세지를 출력
    • error : 컴파일 도중 발생하는 모든 경고 메세지에 대해 오류로 간주
  • 주로 -Wall 옵션이 많이 사용


-O [level]

  • 컴파일러의 최적화와 관련된 옵션

  • 최적화 레벨이 증가함에 따라

  • 목적 코드의 크기 감소

  • 프로그램 수행 속도 감소

  • 컴파일 시간 증가

  • 레벨이 높을수록 더 많은 최적화 작업 수행


-g

  • 디버거 툴(gdb)을 사용하기 위한 옵션
  • 디버깅 정보를 포함하여 어셈블리 코드 새엇ㅇ
  • -O 옵션과 함께 사용 시 문제 발생 가능
  • 최적화 과정에서 일부 디버깅 정보가 삭제될 수 있음
반응형

'멀티코어 프로그래밍 > Basic' 카테고리의 다른 글

스레드 스케줄링  (29) 2022.03.31
Make / Makefile  (41) 2022.03.30
프로파일링  (13) 2022.03.28
GDB 명령어  (13) 2022.03.27
GDB  (6) 2022.03.26

댓글