리눅스 gcc
IT위키
더 많은 작업
- GNU 프로젝트의 C와 C++ 컴파일러(GNU Compiler Collection).
- 유닉스와 리눅스 모두에서 명령어와 옵션이 같음
- 경로 : /usr/bin/gcc
gcc 는 소스 파일을 전처리 → 컴파일 → 어셈블 → 링크 네 단계로 처리해 실행 파일을 만든다. 옵션 없이 소스 파일만 주면 네 단계를 모두 거치고, 출력 파일 이름을 정하지 않았으므로 a.out 이라는 실행 파일을 만든다. 중간에 생긴 오브젝트 파일(.o)은 링크가 끝나면 지운다.
| 단계 | 멈추는 옵션 | 결과 |
|---|---|---|
| 전처리(#include, #define 처리) | -E | 표준 출력(.i) |
| 컴파일 | -S | 어셈블리 파일(.s) |
| 어셈블 | -c | 오브젝트 파일(.o) |
| 링크 | (옵션 없음) | 실행 파일(이름을 주지 않으면 a.out) |
gcc [옵션] 파일···
- -o 파일 : 만들 파일의 이름을 정한다. 주지 않으면 실행 파일은 a.out, -c 의 오브젝트 파일은 소스이름.o 다.
- -c : 링크하지 않고 오브젝트 파일(.o)까지만 만든다.
- -S : 어셈블리 파일(.s)까지만 만든다.
- -E : 전처리만 하고 결과를 출력한다.
- -g : 디버거(gdb)가 쓸 디버깅 정보를 넣는다.
- -O, -O2, -O3 : 최적화 수준을 정한다.
- -Wall : 흔한 경고를 모두 켠다.
- -I 디렉터리 : 헤더 파일을 찾을 디렉터리를 더한다.
- -L 디렉터리 : 라이브러리를 찾을 디렉터리를 더한다.
- -l이름 : 라이브러리 lib이름.so(또는 .a)를 링크한다. 예: -lm 은 수학 라이브러리
- -D 이름[=값] : 매크로를 정의한다.
- --help : 사용법을 출력한다.
- --version : 버전 정보를 출력한다.
# 실행 파일 a.out 이 생긴다 $ gcc lin.c $ ./a.out # 실행 파일 이름을 lin 으로 $ gcc -o lin lin.c # 오브젝트 파일 lin.o 만 만든다 $ gcc -c lin.c # 오브젝트 파일 여럿을 링크하고 수학 라이브러리를 붙인다 $ gcc -o lin lin.o util.o -lm # 경고와 디버깅 정보를 켜고 최적화 $ gcc -Wall -g -O2 -o lin lin.c
gcc lin.c는 lin 이나 lin.o 를 남기지 않는다. lin.o 를 얻으려면 -c, lin 이라는 실행 파일을 얻으려면 -o lin 을 준다- 여러 파일을 나눠 컴파일하고 링크하는 순서는 보통 Makefile 에 적어 make 로 돌린다