.c =>   cpp 전처리  => 컴파일 cc   =>  어셈블 as   =>  링크 ld   => a.out
 전처리 소스파일에 전처리 파일 삽입 - 앞에 샾붙은것들처리
컴파일단계 어셈블리어로 바꾸고
어셈블단계는 어셈블러를 기계어로 바꾸고 오브젝트 파일 생성
링크단계 메모리 맵설정에 따라서 각각 메모리 주소 설정

-E 전처리만 실행하고 컴파일 중단
-c 링크수행하기 바로 전단계에서 수행을 멈춘다 .o파일이 나온다
-o 출력팡리 이름을 적어준다.
-I 헤더파일을 컴색하는 디렉토리 목록을 추가한다. 인클루드 패스를 지정할수있다.
-l 라이브러리 파일을 컴파일시 링크한다.
-g 바이너리 파일에 표준 디버깅 정보를 포함하다. 이옵션을 주어야 디버깅정보가 포함되서
 디버깅할때 c소스 레벨에서 디버깅을 하게된다.
-ggdb 바이너리파일에 GNU디버거인 gdb만이 이해할수있는 많은 디버깅 정보를 포함시킨다.
-O 컴파일 코드를 최적하시킨다. 옵티마이 제이션
-O n  여기에 숫자를 넣으면 최적화를 시킬수있다. 0은 최적화 시키지않는다는의미이고 숫자가 높을 수록 최화된다.
             1-3까지 줄수있는데 보통 2까지 준다.
-DFOO=RAR 명령라인에서 -D옵션에 의미가 있는것이지 FOO=RAR은 응용
       D를 쓰고 FOO라는 선행처리기로 매크로를 정의한다.
                             예 -D__ABC이렇게 하면 소스상에서 샵디파인 으로 정의를 안해도 정리가된다,.
-static 정적라이브러리에 링크한다.
 정적라이브러리에 링크하면 파일사이즈가 커진다.
 동적라이브러리는 메모리에 항상 상주에있는 라이브러리
 라이브러리의 코드가 컴파일 되지 않고 단순히 주소만 맵핑되서 크기가 작다.
 정적라이브러리는 라이브러리코드가 컴파일 되서다 들어간다. 하나의 실행파일로 완성
 프린트에프가 동적라이브러리에 링크되어있으면 여러분이 작성한 실행파일에는 없고
 여러분이 작성 한 코드가 실행되다가 프린트 에프가필요하면 로딩해서 돌린다.
 정적라이브러리는 라이브러리 파일이 동일하게 따로 있는데
 프린트에프의 코드까지 하나의 파일로 가지고 간다.

 동적:gcc컴파일러 버전에 영향을 받을수있고 어떤상황에선 영향을 받아서 영향을받을수있다

 정적:코드까지 다가지고 가기 때문에 gcc컴파일러 버전에 영향을 받지 않고 실행이 가능하다.
-ansi 표준과 출동하는 GNU확장안을 취소한다.

      리눅스  |  2007. 9. 6. 10:20



sokoban's Blog is powered by Daum & Tattertools