GCC에서 사용하는 옵션

* -o 옵션(소문자)

-o 옵션은 출력(output) 파일의 이름을 정하는 옵션이다. 아까 살펴보았던 hello.c를 가지고 예를 들어보면 다음과 같다

# gcc -o hello hello.c

컴파일이 끝나면 hello라는 파일이 만들어진다. 이것을 실행 하려면 ./hello라고 하면 된다.

# ./hello
Hello, Linux World

* -c 옵션

-c 옵션은 컴파일만을 할 때 사용하는 옵션이다.

소스코드를 컴파일하면 소스코드의 기계어 코드인 오브젝트 코드가 만들어지고, 이것을 실행에 필요한 라이브러리와 링크하면 하나의 실행파일이 만들어진다.

하지만 -c 옵션을 사용하면 컴파일만을 실행하고 해당하는 오브젝트 코드인 .c 파일만 생성한다. 즉 hello.c 에서 .c 부분을 떼어내고 .o를 붙인 파일인 hello.o를 만들어 낸다.

*이렇게 -c 옵션을 사용하는 이유는 여러 개의 소스 파일을 묶어서 실행파일을 만들기 위해서이다.

* 예를 들어서 abc.c와 def.c라는 파일을 가지고 'xyz'라는 실행파일을 만들고 싶으면 다음과 같이 하면 된다.


# gcc -c abc.c
# gcc -c def.c

# gcc -o xyz abc.o def.o

# ./xyz


c

파일이름 : main.c

extern void hello_world();

int main()
{
hello_world();
return 0;
}

파일이름 : hello.c
#include <studio.h>

void hello_world()
{
printf("Hello linux world\n");
}


* -I 옵션

#include 문장에서 지정한 헤더 파일이 들어있는 곳을 정하는 옵션이다. 디렉토리를 명시할때는 -I<디렉토리>로 표시한다.

* -l 옵션( L의 소문자)

사용하는 라이브러리를 명시한다. 라이브러리 프로그램 작성에 필요한 함수를 모아놓은 것이다.
일반적으로 라이브러리는 파일명 끝이 .a로 끝난다. 여기서 a는 Archive를 의미한다. /usr/lib 디렉토리를 살펴보면 많은 라이브러리들이 있는 것을 확인할 수 있다



-l 옵션은 링크(link)할 라이브러리를 명시해 주는 옵션이다. 이것은 -I 옵션과 마찬가지로 붙여서 사용한다. 보통 라이브러리들은 lib*로 시작하기 때문에 앞에 있는 lib 글자는 생략한다.
즉, librpm.a 같은 경우는 맨 앞의 lib와 맨끝의 .a를 떼어낸다.

예제 : 라이브러리를 만들고 사용해 보자.


파일이름 : hello.h
extern void print_hello ( void );
파일이름 : hello.c
#include <studio.h>
#include "hello.h"

void print_hello ( void )
{
printf ( "Hello, Linux World\n" );
}
파일이름 : main.c

#include "hello.h"

int main ( void )
{
print_hello ();
return 0;
}


GCC로 컴파일하기

# gcc -o hello.o hello.c main.c

ar를 사용해서 라이브러리 archive를 만든다. ar은 라이브러리를 관리하는 프로그램이다.

# ar r libhello.a hello.o //archive에 라이브러리를 추가한다.
# ar s libhello.a //새롭게 archive를 만든다.
# ar t libhello.a //archive에 들어있는 object 파일을 보여준다.
hello.o

이제 archive가 만들어졌으며 이를 사용해서 다시 컴파일해 보자

# gcc -o hello main.c -lhello

그러면 다음과 같은 에러가 발생한다.

ld: cannot open -lhello: No such file or directory

* -L 옵션

이것은 라이브러리 archive의 경로를 지정할 때 사용하는 옵션이다. 방금 전에 'ld: cannot open -lhello: No such file or directory'라는 에러가 발생한 이유는 라이브러리의 경로를 지정해 주지 않았기 때문이다. 완성된 프로그램을 위해서는 -L 옵션을 사용해서 archive의 경로를 추가해 주어야 한다.

# gcc -o hello main.c -lhello -L.

-L. 은 현재 디렉토리를 가리킨다

출처 : Tong - whaleluv님의 기본정보통

'Linux > Linux 명령어' 카테고리의 다른 글

useradd  (0) 2008.02.11
GCC 사용 옵션  (0) 2008.01.07
리눅스용 fdisk 사용하기  (0) 2007.09.09
mkfs 란?  (0) 2007.09.09
Posted by Real_G