GCC(컴파일러) + VIM(에디터)
GCC(GNU Compiler Collection)
- 그냥 score이라고만 하면 명령어로 생각함. 실행할 때는 ./score로 해야함
[gcc 컴파일]
1) gcc 파일명(*.c) : Default로 out 파일이 생성된다. a.out
out 파일도 실행시킬 수 있음
2) gcc -c 파일명(*.c) : 오브젝트 파일을 생성한다.
3) gcc -c 오브젝트_파일명(*.o) 파일명(*.c)
gcc -o 실행파일명(*.out) 오브젝트_파일명(*.o)
4) gcc -o 실행파일 파일명(*.c) : 실행 파일을 만든다. (3번을 한줄로...) 소문자 '오'(output)
[gcc 옵션]
1. -W -Wall 옵션 : 아주 사소한 모호성에 대해서도 경고가 발생
2. -O2 옵션 : 최적화 레벨 2로 설정. (대부분의 최적화를 시도) 대문자 '오'
GCC Compilation Process
- preprocessing(전처리기가) : 매크로를 확장시킴
Source File(source.c) -> Preprocessed File(.i file)
gcc -E source.c //파일생성은x
gcc -E source.c -o source.i //파일생성
- compilation(컴파일러가) : 소스코드 -> 어셈블리코드
Preprocessed File(.i file) -> Assembly code(.s file)
gcc -S source.c
- assembly(어셈블러가) : 어셈블리코드 -> 머신코드(=바이너리코드)(기계명령, 오브젝트파일, 실행파일 x)
Assembly code(.s file) -> Object code(.o file)
gcc -c source.c
hexdump swap2.o // 16진수로,
objdump -D swap2.o // disassemble, 기계어->어셈블리언어
- linking(링커가) : 실행 가능한 포맷으로
Object code(.o file) -> Executable file(.exe)
gcc source.o -o source
./source
5. -E 옵션 : 전처리 과정의 결과를 화면에 보이는 옵션
(전처리과정 중 발생한 오류를 검증)
6. -S 옵션 : cc1으로 전처리된 파일을 어셈블리 파일로
컴파일까지만 수행하고 멈춘다. (*.s)
7. -c 옵션 : as에 의한 어셈블까지만 수행하고 링크는 수행하지 않는다.
8. -v 옵션 : gcc가 컴파일을 어떤 식으로 수행하는지를 화면에 출력한다.
파일 분리
myswap.c
swap.c
swap.h
gcc myswap.c swap.c -o myswap
매크로
gcc insa.c -o insa -DKOREAN
-D[매크로] 옵션 : 매크로를 외부에서 define 할 때 사용한다.
#ifdef KOREAN (=KOREAN이 정의되어 있다면) ~ #else ~ #endif