[Linux System Programming] GCC 컴파일러 사용법

천승주·2022년 9월 21일
0

컴파일 과정

소스코드는 다음과 같은 과정으로 컴파일되어 실행파일이 된다.

  • 전처리기(preprocessor): 소스코드의 주석제거, define을 치환하는 기능
  • 컴파일러(compiler): 어셈블리 파일로 변환(어셈블리어는 CPU 명령어 조합으로 CPU에 의존적)
  • 어셈블러(assembler): object 코드 파일로 변환. object 파일은 0과 1로 이루어진 바이너리 코드(아직 주소 정보가 확정되지 않음)
  • 링커(linker): object 파일을 묶어 실행 코드 파일로 변환. 운영체제가 로딩할 수 있도록 주소 정보를 할당한 파일을 만들어 낸다.(링커는 운영체제에 의존적)

GCC 명령어

명령창에서 gcc 매뉴얼을 확인해보자.

GCC(1)                           GNU                          GCC(1)

NAME
       gcc - GNU project C and C++ compiler

SYNOPSIS
       gcc [-c|-S|-E] [-std=standard]
           [-g] [-pg] [-Olevel]
           [-Wwarn...] [-Wpedantic]
           [-Idir...] [-Ldir...]
           [-Dmacro[=defn]...] [-Umacro]
           [-foption...] [-mmachine-option...]
           [-o outfile] [@file] infile...

       Only the most useful options are listed here; see below for
       the remainder.  g++ accepts mostly the same options as gcc.
...
// ex_gcc1.c
#include <stdio.h>
int main()
{
    printf("Hello Linux\n");
    return 0;
}

  • 옵션을 사용하지 않고 gcc 명령을 내리면 컴파일 후에 링킹 과정을 거쳐 a.out 결과물이 만들어진다.
  • 결과물 이름을 지을 땐 gcc -o [output] [file.c]를 사용한다.

  • -c 옵션을 사용하면 컴파일을 수행하지 않고 확장자가 o인 목적파일을 만들어 준다. 실행이 가능하려면 링킹과정을 거쳐야 실행파일이 만들어진다.

자주 사용하는 GCC 옵션

  --help : 간단한 옵션을 출력
  --version 또는 -v : gcc의 버젼을 출력
  -o : 출력 파일명을 지정
  -c : 링킹 과정을 진행 하지 않고 .o 파일인 오브젝트 파일까지만 생성
  -S : 어셈블러까지 진행 하지 않고, 컴파일러까지의 출력인 .S 어셈블러 파일을 생성
  -E : 컴파일러까지 진행 하지 않고, 전처리까지의 출력인 .i 파일을 생성
  -O1 ~ -O3 : 최적화 수준을 지정. 숫자가 클수록 높은 수준의 최적화.
  -g : 디버깅을 위한 정보를 컴파일 하면서 생성
  -D : define 을 할수 있는 옵션
  -l (엘) : 라이브러리 이름을 지정
  -L : 추가 라이브러리 디렉토리를 지정
  -W : 모든 에러 메시지 출력
  -w : 모든 에러 메시지를 출력 하지 않음
  -I(아이) : 추가 헤더 파일이 있는 디렉토리를 지정



References

0개의 댓글