본문 바로가기

컴퓨터

Linux 에서 C 코드 컴파일하기

리눅스에서 C 언어를 활용하여 프로그램을 만들기 위해서는 소스코드를 작성할 줄도 알아야하지만 먼저 작성한 코드를 컴파일하여 실행할 수 있도록 만들줄 알아야 한다.

다음과 같이 간단한 C 프로그램, Hello world 를 작성하자.

// File name : hello.c
#include 

int main()
{
  printf("Hello, world!\n");
  return 0;
}
이제 이 프로그램을 컴파일하고자 한다면 다음과 같이 입력한다.
$ cc -c hello.c
$ ll
합계 8

-rw-rw-r-- 1 timewalker timewalker   74 2011-11-10 14:17 hello.c
-rw-rw-r-- 1 timewalker timewalker 1504 2011-11-10 14:18 hello.o
then I have hello.o file in current directory. This file is object file of hello.c. Now, we should link this file to make a executable file.

$ cc -o hello hello.o

이 명령어는 object 파일인 hello.o 를 링크하는 과정을 거쳐서 hello 라는 실행파일을 만들어내라는 명령어이다.

$ ll
-rwxrwxr-x 1 timewalker timewalker 6425 2011-11-10 14:18 hello
-rw-rw-r-- 1 timewalker timewalker   74 2011-11-10 14:17 hello.c
-rw-rw-r-- 1 timewalker timewalker 1504 2011-11-10 14:18 hello.o
 
이제 프로그램을 실행해보자.

$ ./hello
Hello, World! 

그런데 혹시 MS 계열에서 프로그래밍을 해보거나 다른 IDE(Integrated Development Environment; 통합개발환경)를 이용해본 사람이라면 Build & Run 이라는 개념을 알고 있을 것이다. 이는 컴파일과 오브젝트 파일의 링크를 자동적으로 알아서 수행하는 것을 말하는데 cc 를 이용해도 비슷하게 컴파일과 링크를 동시에 해결할 수도 있다.

$ cc -o hello hello.c

이렇게 하면 hello.c 를 컴파일하고 링크해서 곧장 hello 라는 실행가능한 파일을 만들어낸다.
아까 만들었던 hello 와 hello.o 를 삭제하고 위의 명령을 실행해보면 오브젝트 파일의 생성 없이 곧장 실행파일이 만들어지는 것을 볼 수 있다.

$ ll
합계 12
-rwxrwxr-x 1 timewalker timewalker 6425 2011-11-10 14:32 hello
-rw-rw-r-- 1 timewalker timewalker   74 2011-11-10 14:17 hello.c 

cc 이외에도 gcc, g++ 등 여러가지 명령들이 존재하고, 차후에 이들 각각에 대한 공부가 필요할 듯하다.
뒤이어서는 몇몇 서브코드들과 함께 메인코드를 컴파일해야 하는 경우 cc 를 이용해서 어떻게 컴파일하는지 알아보고 더 나아가서 Make 를 사용해서 이런 작업을 하는 방법을 알아보기로 한다.