퍼온곳: http://psjin14.egloos.com/2989814
[gcc 컴파일]
1) gcc 파일명(*.c) : Default로 out 파일이 생성된다. (ex a.out)
2) gcc -c 파일명(*.c) : 오브젝트 파일을 생성한다.
3) gcc -c 오브젝트_파일명(*.o) 파일명(*.c)
gcc -o 실행파일명(*.out) 오브젝트_파일명(*.o)
4) gcc -o 실행파일 파일명(*.c) : 실행 파일을 만든다. (3번을 한줄로...)
(소스 파일 컴파일 → 오브젝트 파일 생성 → 실행파일 생성 → 오브젝트 파일 삭제)
===================================================================================================
[gcc 옵션]
1. -Wall 옵션 : 모든 모호한 코딩에 대해서 경고를 보내는 옵션
2. -W 옵션 : 합법적이지만 모호한 코딩에 대해서 경고를 보내는 옵션
3. -W -Wall 옵션 : 아주 사소한 모호성에 대해서도 경고가 발생
4. O2 옵션 : 최적화 레벨 2로 설정. (대부분의 최적화를 시도)
5. -E 옵션 : 전처리 과정의 결과를 화면에 보이는 옵션 (전처리과정 중 발생한 오류를 검증)
※ enhanced Tip: --save-temps 옵션
6. -S 옵션 : cc1으로 전처리된 파일을 어셈블리 파일로 컴파일까지만 수행하고 멈춘다. (*.s)
7. -c 옵션 : as에 의한 어셈블까지만 수행하고 링크는 수행하지 않는다.
8. -v 옵션 : gcc가 컴파일을 어떤 식으로 수행하는지를 화면에 출력한다.
9. --save-temps 옵션 : 컴파일 과정에서 생성되는 중간 파일인 전처리 파일(*.i)과 어셈블리 파일(*.s)을
지우지 않고, 현재 디렉토리에 저장한다. (오류 분석에 사용)
===================================================================================================
[cpp0 옵션]
: 소스내에서 사용된 헤더 파일과 define 매크로와 관련된 옵션들이다.
전처리 과정에서 오류가 발생한다면 cpp0 옵션들을 점검해야 한다.
1) -l 옵션 : 전처리 과정에서 헤더 파일을 탐색하는 기본 디렉토리를 추가할 때 사용하는 옵션
2) -include 옵션 : 헤더 파일을 소스내에 추가할 때 사용한다.
3) -D[매크로] 옵션 : 매크로를 외부에서 define 할 때 사용한다.
4) -D[매크로]=[매크로 값] 옵션 : 소스 내에 #define [매크로] [매크로 값] 옵션을 추가한 것과 동일하다.
5) -U[매크로] 옵션 : -D와 반대로 소스 파일 내에 #undef[매크로] 옵션을 추가한 것과 동일하다.
6) -M / -MM 옵션 : -M 옵션 - make를 위한 소스 파일의 모든 종속 항목을 출력
-MM 옵션 - 기본 include 디렉토리에 있는 헤더 파일은 빼고 종속 항목을 출력한다.
7) -nostdinc 옵션 : 디폴트 include 디렉토리(usr/include)에서 헤더 파일을 탐색하지 않고,
-l 옵션으로 추가한 디렉토리에서만 헤더 파일을 찾는다.
8) -C 옵션 : -E 옵션과 함께 사용하며, 전처리 과정에서 주석을 제거하지 않는다.
9) -Wp,[옵션들] 옵션 : 만약 cpp0와 gcc의 옵션이 같은 것으로 중복되면 gcc 옵션으로 해석되므로...
gcc의 해석을 거치지 않고 바로 cpp0 옵션으로 전달하고 싶을 때 사용한다.
===================================================================================================
[cc1 옵션]
: "C언어 옵션, 경고 옵션, 최적화 옵션, 디버깅 옵션"의 4가지 종류
"경고 수위 조절 or 최적화 수위 조절"을 하고 싶을 때 사용한다.
1. C언어 옵션 : C언어 종류와 표준에 관련된 옵션
1) -ansi 옵션 : ANSI C 표준에 부합하는 소스를 작성하고자 할 때 사용하는 옵션
2) -std=[C 표준들] 옵션 : 기타 다른 표준들을 지정하고자 할 때 사용한다.
3) -traditional 옵션 : 오래된 Traditional C 문법으로 문법을 검사한다.
4) -fno -asm 옵션 : gnu89 문법을 바탕으로 asm, inline, typeof 키워드를 사용하지 않기를 원할 때
사용한다.
2. 경고 옵션 : cc1의 옵션을 조정하여 경고 수위를 조절할 수 있다.
1) -W / -Wall 옵션 (gcc 옵션 참고)
2) -w(소문자) 옵션 : 모든 경고 메시지를 제거한다.
3) -Werror 옵션 : 모든 경고를 컴파일을 중단하는 오류로 취급한다.
(경고가 하나만 나와도 컴파일이 중단된다.)
4) -pedantic 옵션 : ANSI C89 표준에서 요구하는 모든 경고 메시지를 표시한다.
5) -pedantic-errors 옵션 : ANSI C89 표준에서 요구하는 모든 오류 메시지를 표시한다.
6) -Wtraditional 옵션 : 소스가 ANSI C와 K&R C 간에 서로 다른 결과를 가져올 수 있는 부분이 있다면
경고한다.
3. 최적화 옵션 : ⓐ 실행 파일의 크기를 줄여 메모리와 하드디스크의 사이즈를 절약 (큰 의미 X)
ⓑ 실행 파일의 크기를 줄여 실행 속도를 향상시키는 것.
1) -O0 옵션 : 최적화를 수행하지 않는다.
2) -O1 옵션 : -O0보다는 조금 낫다.
3) -O2 옵션 : 가장 많이 사용하는 옵션. 일반 응용 프로그램이나 커널을 컴파일 할 때 사용
(거의 대부분의 최적화를 수행한다.)
4) -O3 옵션 : 가장 높은 레벨의 최적화. 모든 함수를 인라인 함수와 같이 취급한다.
(Call 인스트럭션은 사용 X. but, 되도록이면 사용하지 않는 것이 좋다.
→ 너무나 많은 소스의 변경이 가해지기 때문에 왜곡이 발생할 위험이 있다.)
5) -O5 옵션 : 사이즈 최적화를 실행한다. (공간이 협소한 곳에서 사용 - 임베디드 시스템)
4. 디버깅 옵션
1) -g 옵션 : gdb에게 제공하는 정보를 바이너리에 삽입한다.
(-g 옵션을 사용하지 않고 gdb로 디버깅하면, 역어셈 → 어셈블리 코드로만 디버깅 가능)
2) -pg 옵션 : 프로파일을 위한 코드를 삽입한다.
(-pg 옵션으로 컴파일 → gmon.out(프로파일 정보) → gprof로 gmon.out 파일 분석)
===================================================================================================
[as의 옵션]
: gcc는 as의 옵션에 대해서는 알지 못한다. -Wa,[as 옵션들] 형식으로 gcc를 거치지 않고
바로 전달해야 한다. -Wa, -al, -as와 같은 형식으로 사용하면 as에게 -al -as 옵션이 같이 전해진다.
-Wa,[as 옵션들]
1) -al 옵션 : 어셈블된 인스트럭션을 보인다.
2) -as 옵션 : 정의된 심볼을 보인다.
3) -l[패스] 옵션 : include 디렉토리를 지정한다. 어셈블리 소스 내에서 사용된 include 지정자가
지정하는 헤더파일을 찾고자 할 때 사용한다.
4) -W / --no-warn : 경고 메시지를 출력하지 않는다.
5) -march=[아키텍처 문자열] : 해당 어셈블리
===================================================================================================
[collect2 / ld 옵션]
: 링크 옵션
1) -L[라이브러리 디렉토리] 옵션 : 라이브러리를 찾을 디렉토리를 지정한다.
2) -l 옵션 : 같이 링크할 라이브러리를 지정한다.
3) -shared 옵션 : 공유 라이브러리와 정적 라이브러리가 같이 있을 경우, 공유 라이브러리를 우선하여
링크한다. (아무 옵션을 주지 않아도 공유 라이브러리를 우선으로 링크한다.)
4) -static 옵션 : 정적 라이브러리와 공유 라이브러리가 같이 있다면, 정적 라이브러리를 우선하여
링크한다. (속도는 빠르지만 파일 사이즈가 커진다는 점 고려할 것!)
5) -nostdlib 옵션 : 링크시에 표준 C 라이브러리를 사용하지 않는다.
(OS, 부트로더와 같은 프로그램을 컴파일 할 때 사용)
6) -nostartfiles 옵션 : crt1.o 등과 같은 start up 파일을 링크하지 않는다.
(OS, 부트로더와 같은 프로그램을 컴파일 할 때 사용)
7) -Wl,[링크 옵션들] 옵션 : gcc를 거치지 않고 바로 링크에게 옵션을 정해주고자 할 때 사용한다.
(사용법은 -Wa와 동일한다.)
< 유용한 링크 옵션들 >
① -s 옵션 : 실행 파일에서 심볼 테이블을 제거
② -x 옵션 : 출력 파일에서 로컬 심볼 제거
③ -n 옵션 : 텍스트 영역을 읽기 전용으로 만듬
④ -r 옵션 : 추후 링크가 가능하게 오브젝트를 만듬
⑤ -e [name] 옵션 : 시작 심볼을 name 심볼로 사용 (default 시작심볼 : _start 심볼)
⑥ -M 옵션 : 심볼들의 정보를 자세하게 출력
⑦ oformat [format] 옵션 : 주어진 형식의 오브젝트 파일을 생성
=============================================================================================================
'language > C' 카테고리의 다른 글
2차원 배열 크기 구하기 (0) | 2013.01.15 |
---|---|
printf format string (0) | 2012.01.18 |
callback 함수 (0) | 2011.10.06 |
데이터 타입 (0) | 2011.07.14 |
컴파일 오류 메세지 (0) | 2011.07.07 |