본문 바로가기
Programming/C++

C 컴파일 과정 (4단계)

by Winduck 2023. 1. 19.
반응형

컴파일 과정에 대해 알아보겠습니다. (참고 https://www.it-note.kr/263)

1. 전처리(PreProcessing): 전처리 단계(main.c => main.i)


과정은 전처리 과정으로 컴파일 이전에 헤더("#include")에서 필요한 부분을 가져오거나 "#define" 치환하는 작업을 수행합니다. 소스코드는 ".c"에서 ".i" 파일을 생성합니다.
내부 내용은 아래와 같이 바뀌며 키워드에 따른 해석은 아래와 같습니다.
"#":
컴파일러에서 무시하는 주석이며 참조되는 자료의 위치를 표기합니다.
명령여: gcc -E ./main.c

 

2. Compile(컴파일) 단계: 어셈블리 코드 생성(main.i=>main.s)


전처리가 끝난 코드를 기반으로 어셈블리 소스코드를 생성합니다. 여기서 생성되는 어셈블리어들은 CPU 또는 OS 맞는 문법으로 생성됩니다.
* 어셈블리 종류
- GAS(GNU Assembler), MASM(Microsoft Macro Assembler), NASM(Netwide Assembler) 

 


명령어: gcc -S main.c

3. Assemble 단계: 기계어 코드 생성(main.s->main.o)



생성된 어셈블리 파일을 기계어로 변경한 오프젝트 파일로 생성합니다. 오브젝트 파일을 봤더니 벌써 ELF(?) 링크 단계에서 실행파일(ELF)을 만들줄 알았는데…??

명령어:  gcc -O main.c


그래서
파서로 Import 테이블을 확인해보았더니 비어 있는 것을 있었다. 그래서 어셈블단계는 단순히 어셈블리를 기계어로 바꾸는 과정이 아니라 실행파일(ELF) 껍데기도 함께 만들어주는 과정으로 확인하였다.

 4. Linking 단계(최종): 라이브러리 코드 연결(main.o->a.out)


- 단계에서 오브젝트 파일은 프로그래머가 작성한 코드에 대한 어셈블리만 존재할뿐 "printf" "scanf" 같은 코드는 존재하지 않습니다. 따라서 이단계는 앞 과정에서 만들어진 오브젝트 파일에서 라이브러리 함수코드를 연결(임포트)하는 단계라는 것을 확인할 수 있었습니다.
 


 

반응형

댓글