본문 바로가기
  • 시 쓰는 개발자
CS 개념/LINUX

리눅스로 *.c파일 컴파일하기

by poetDeveloper 2023. 11. 26.

GCC란?

GCC는 GNU Complier Collection의 약자로, 리눅스를 공부하며 접하게 된다. 영어 뜻에서도 알 수 있듯이 컴파일러이다. 그래서 리눅스상에서 어떤 파일을 만들고 실행하고 싶을 때 컴파일하는 도구로써 사용된다. 참고로, 약자에서 나오는 GNU는 운영체제라고 생각하면 되고, GNU와 Linux를 합쳐서 사용하기 때문에 Linux라고 하는 경우가 많다. 보통 C언어를 작업할 때 접하고, 요즘엔 C++, java등도 지원한다고 한다.

 

컴파일 과정

컴파일 과정을 알아야하는 이유는, 하나의 소스파일이 실행되면서 점점 이상한 확장자의 파일들이 생기는데 그때마다 혼란스럽지 않기 위함이다. 컴파일해서 소스코드가 실행파일이 되는 과정을 4가지 단계를 거친다. 즉, 저기 아래에서 이야기할 예정인 gcc 명령어를 사용해서 gcc test.c 라고 하면 아래와 같은 4가지 단계를 거쳐서 실행파일이 생성되는 것이다.

 

1. 전처리

#include , #define 이런 것들을 먼저 처리해주는 부분이다.

전처리 명령어 : gcc -E test.c -o test.i

test.i가 test.c에서 전처리 된 파일이다.

 

2. 컴파일

전처리된 test.i로부터 어셈블리어로 된 test.s파일을 생성한다.

어셈블리어 파일 생성 명령어 : gcc -S test.c

이제 test.s 파일이 생성된 상태이다.

 

3. 어셈블

어셈블리어 파일인 test.s를 기계어로 된 오브젝트 파일 test.o로 변환한다. 지금 과정을 보면 알 수 있겠지만, 점점 더 깊숙히 컴퓨터친화적인 코드로 변환하는 과정이다. 이때 오브젝트 파일은 컴퓨터가 읽을 수 있는 파일이 되고, 0과 1로 이루어져있다.

오브젝트 파일 생성 명령어 : gcc -c test.c

 

4. 링크

test.c에서 사용하는 다른 프로그램/라이브러리가 있다면 그것을 가져와서 사용한다.

링킹 명령어 : gcc -o test test.c library.c

 

GCC 명령어

모든 명령어의 시작은 gcc 라고 생각하면 된다. gcc -E test.c , gcc test.c 등. 다만, 컴파일 전 파일이 있어야 하므로 파일이 없어서 생성해야한다면 이러한 과정을 거칠 수 있다.

 

참고)  파일 생성 과정

  • vi test.c
  • 내용 입력 후 :wq
  • 파일 생성 완료
  • vim test.c
  • 파일 수정 후 :wq
  • 파일 수정 완료

  • 실행 시키기  :  ./파일명

이때 -o 파일명 옵션을 사용하면 실행파일 이름을 지정할 수 있다. 만약 지정하지 않는다면 test.out 과 같이 out이 디폴트값이 된다. 이때는 gcc ./test.c라고 안해도 된다. 그냥 ./test.c 라고만 해도 가능하다.

  • 전처리(-E)  :  gcc -E 파일명 -o 파일명.i

전처리 단계만 실행하고 컴파일 과정은 거치지 않는다. 파일(*.i)로 저장하려면 -o 옵션과 함께 사용해야 한다.

  • 어셈블리 파일 생성(-S) : gcc -S 파일명

컴파일 단계를 수행하고, 어셈블 과정은 거치지 않는다. 어셈블리어 파일(*.s)을 저장한다. (어셈블리X 링킹 X)

  • 오브젝트 파일 생성(-c)

어셈블 단계까지만 실행하고 오브젝트 파일(*.o)을 저장한다. (링킹 X)

'CS 개념 > LINUX' 카테고리의 다른 글

Linux Permission  (0) 2024.04.05
LINUX란 ?  (0) 2023.11.15