본문 바로가기

Academy I/Tech Academy

gcc 컴파일 과정

1) what is gcc

      http://en.wikipedia.org/wiki/GNU_Compiler_Collection 를 보면 잘 나와 있다.

     MinGW or Mingw32 (  Minimal SYStem ) -  Win32  platform ( Dev C++ )
     
     MSYS                     (  Minimal SYStem ) -  cygwin

2) gcc 컴파일 과정

    gcc 의 컴파일 과정을 살펴보기 위하여

    gcc -save-temps main.c -o main.exe 라고 명령을 하였다.

    결과물로서
 
    main.c  main.e  main.exe  main.i  main.o  main.s 의 파일이 보였다.

    gcc 또는 g++ 이 아래의 실행 파일들을 순서 대로 호출하게 되어 있다.

    순서 )

       가) The C Preprocessor <전처리기>  -  cpp,cpp0

            ( c++ 인 경우 결과 파일명은 main.ii )

            ( cc1 -E 로 호출 가능 )

            # 으로 시작하는 구문을 처리

            main.i 에 전처리된 결과가 있다.

            main.c --> main.i

     나) C 컴파일러  - cc1
          ( c++ 인 경우 cc1plus )

          main.i ---> main.s   ( 결과물로 어셈블리 코드가 나온다 )

     다) 어셈블러 - as   ( 어셈블리어를 기계어 코드로 생성한다 )

          main.s   ---> main.o

     라) 링커 -  ld, collect2

          main.o + 라이브러리 --> a.out ( main.exe)


3) 옵션
     http://gogamza.cafe24.com/321 < 고감자님 > 불로그에 포스팅 된 내용을
     기반으로 좀더 내용에 살을 붙여 보도록 하겠다.
 가) gcc 전역 옵션

      -E : 전처리 과정 화면에 출력

             gcc -E fib_main.c  ; 화면에 출력됨

             gcc -E fib_main.c -o fib_main.i ; 결과 파일에 출력

     -S : 어셈블리 파일 생성

             gcc -E fib_main.c  ; 결과 파일이 fib_main.s 에 저장 ( -o 옵션으로 결과 파일명 변경 가능 )

     -c : 오브젝트 파일 생성

            gcc -c fib_main.c  ; 결과 파일이 fib_main.o 에 저장 ( -o 옵션으로 결과 파일명 변경 가능)         


     -v : 컴파일 과정 화면에 출력           

            gcc -v fib_main.c 


     --save-temps : 컴파일시 생성되는 중간 파일 저장

            gcc -save-temps main.c -o main.exe

                 ===> main.c  main.e  main.exe  main.i  main.o  main.s


     -da  :컴파일 과정에서 생성되는 중간 코드 생성

             --save-temps 에서 생기는 파일의 각 과정의 결과물..

             여기에서 생기는 파일은 중간과정을 처리하기 위해 생김.


             예를 들면 심볼테이블

             gcc -da main.c -o main.exe  :: 아주 다양한 파일들이 보인다.

             그러나 --save-temps 에서 생성된 파일은 보이지 않는다.

           

'Academy I > Tech Academy' 카테고리의 다른 글

Unix - 웹 로그 분석, 날짜및 시간대 범위 분석(awk, uniq, egrep)  (0) 2015.10.02
Jar Make  (0) 2015.09.16
Java Makefile  (0) 2015.09.15
한국 각 증권사별 API 현황  (0) 2015.06.16
sed(stream editor)  (0) 2015.02.04
[REGEX]Regular expression  (0) 2015.02.02
Awk  (0) 2015.02.02
Regular expression  (0) 2015.02.02