리눅스에서는 C 언어의 코드를 컴파일 하기 위하여 gcc 명령어를 사용한다.
gcc는 아래의 프로그램을 차례대로 수행한다.
[표1] gcc가 실행시키는 프로그램
| cpp | 전처리기 |
| cc1 | 컴파일러 |
| as | 어셈블리 |
| ld | 링커 |

1. 전처리 단계
- cpp는 소스 파일의 #include와 #define과 같은 #으로 시작하는 전처리기 부분 처리
- 필요한 해더 파일을 삽입, 실행 문장의 매크로를 상수로 변환
- file.c(소스파일)이 전처리기를 거쳐 file.i가 생성되지만 디스크에 저장은 안 됨

2. 컴파일 단계
- file.i가 컴파일러를 거쳐 file.s가 생성되지만 바로 어셈블 단계가 실행되므로 디스크에 저장은 안 됨

3. 어셈블 단계
- file.s(소스파일)이 어셈블러를 거쳐 file.o(오브젝트 파일)가 생성
- 오브젝트 파일: 기계가 직접 이해할 수 있는 기계어로 된 파일

4. 링크 단계
- 라이브러리 함수와 오브젝트 파일들을 연결해 실행 파일을 생성

5. 파일 확장자에 따른 처리 방법
| 확장자 | 종류 | 처리 방법 |
| .c | C 소스 파일 | gcc로 전처리, 컴파일, 어셈블, 링크 |
| .C .CC | C++ 소스 파일 | g++로 전처리, 컴파일, 어셈블, 링크 |
| .i | 전처리된 C 파일 | gcc로 컴파일, 어셈블, 링크 |
| .ii | 전처리된 C++ 파일 | g++로 컴파일, 어셈블, 링크 |
| .s | 어셈블리어로 된 파일 | 어셈블, 링크 |
| .S | 어셈블리어로 된 파일 | 전처리, 어셈블, 링크 |
| .o | 오브젝트 파일 | 링크 |
| .a .so | 컴파일된 라이브러리 파일 | 링크 |
※ 이 글은 책 "초보자를 위한 Linux&Unix C 프로그래밍"을 기반으로 작성하였습니다.
'System > Linux' 카테고리의 다른 글
| <Linux> gcc option (2) | 2022.04.15 |
|---|---|
| <Linux> Error: Dpkg: Error Processing [Something] (--Configure) (0) | 2022.04.14 |
| <Linux> Ubuntu 9.04에서 apt-get update 오류 해결법!(Some index files failed to download, they have been ignored, or old ones used instead) (0) | 2022.04.07 |
| <Linux> Command와 Command를 이어 주는 문법 (0) | 2022.03.29 |
| <Linux> Ubuntu 터미널 기본 command 와 단축키 (1) | 2022.03.28 |