gcc로 C언어 컴파일하기. 실행하기.

Posted by 겨울에
2011. 2. 7. 17:54 scrap/ Linux
Linux gcc로 c compile, 실행

안녕하세요. 제가 리눅스를 처음접했을때 /*지금도처음이지만 ^^;*/
gcc를 MS사의 비주얼스튜디오같은 비주얼한 툴로 생각해서 한참 찾아 헤맸던 기억이 있습니다.
지금도 gcc가 폼을갖춘 프로그램으로 존재하는지는 잘 모르겠지만 저처럼 찾아헤매셨던 분들을 위해 마련했습니다.

일단 gcc컴파일은 TUI입니다. 그래픽이있는 GUI와 다르게 text로 처리를 하는것이죠.

자 터미널을 엽니다.



그리고 터미널에 "vi [파일명.c]"를 입력해 줍니다.

vi는 윈도우로치면 메모장과 비슷한 텍스트 에디터입니다.
좀더 쉽게생각해서는 메모장에 c소스를 입력, 저장한 후 컴파일러로 컴파일해주는 과정이 되겠지요.
비주얼C에서 한번에 처리하는것을 각각의 프로그램을 이용해 분업하는것과 다름없습니다.

$vi hello.c 이렇게 입력후 엔터를치면 



hello.c 라는 이름의 공백의 문서가나타나는데



이곳에 간단한 소스를 입력합니다.
알파벳 i키를 눌러주면 입력모드가 됩니다.

#include <stdio.h>
int main(){
printf("hello, world!\n");
return 0;
}



사용하다보면 비주얼C처럼 구문의 색이 변합니다. 참 신기하죠.

이제 이 소스를 저장하고 vi에디터를 종료해야합니다.
입력을 마친상태에서 esc키를 한번 누르고 ":" 바로 : 이키를 눌러줍니다.
그리고 wq를 입력합니다.
w는 저장을 해주는 명령어이고 q는 종료를해 줍니다.
wq는 저장하고 종료하는 것이지요.

자 이렇게 종료하게되면

이런 화면이 나옵니다. vi에서 터미널로 빠져나온 것이지요.



이제 gcc로 컴파일을 해봅시다.
만드신 예제의 파일명을 입력합니다. hello.c를만들었으니
gcc hello.c를 입력합니다.



그러면 저렇게 조용히 컴파일 해줍니다.

그러면 hello.c파일이 저장되어 있는 곳에 a.out라는 파일이 생기는데
이것이 hello.c의 실행파일입니다.
이 a.out는
$./a.out라고 입력해 엽니다. 결과값이 출력되었습니다.




//옵션입니다.

GCC는 GNU Compiler Collection 의 준 말이지요.  전에는 C Compiler 였으나, C++이나 자바, 포트란 등을 모두 컴파일 할 수 있을 정도로 커져서 컴파일러 콜렉션이라고 바뀌었습니다.
 
GCC는 컴파일러입니다.  컴파일러의 패스를 보면 쉽게 쉽게 이해 됩니다.
 
전처리기 -> 컴파일러 -> 어셈블러 -> 링커
 
이 과정으로 되는 것을 GCC 하나로 모두 진행 시켜서 소스 파일을 실행 파일로 생성 시켜 줍니다.
 
전처리기는 cpp(C pre processor) 이며, 소스 파일의 주석 제거 및 define을 치환하는 기능 등을 합니다.
그다음은 cc 이며, C Compiler 입니다.  이것은 전처리기를 거친 소스 파일을 어셈 파일로 변환합니다.
그다음은 as 이며, assmeber 입니다.  이것은 에셈파일을 오브젝트 파일로 변환해주십니다.
마지막으로 ld 이며, linker 입니다.  이것은 오브젝트 파일들을 묶어서 실행 파일로 변환해 줍니다.
 
GCC는 옵션이 아주 많이 있지만, 자주 쓰이는 옵션은 제한 되어 있습니다.
 
--help : 간단한 옵션을 출력해줍니다.
--version : gcc의 버젼을 출력해 줍니다.
 
-o : 출력 파일명을 지정할 때 사용합니다.
-c : 링킹 과정을 진행 하지 않고 .o 파일인 오브젝트 파일까지만 생성 하게 됩니다.
-S : 어셈블러까지 진행 하지 않고, 컴파일러까지의 출력은 .S 어셈블러 파일을 생성하게 됩니다.
-O1 ~ -O3 : 최적화 수준을 지정합니다. 숫자가 클수록 높은 수준의 최적화를 하게 됩니다.
-g : 디버깅을 위한 정보를 컴파일 하면서 생성하게 됩니다.
-D : define 을 할수 있는 옵션입니다.
-l (엘) : 라이브러리 이름을 지정합니다.
 -L : 추가 라이브러리 디렉토리를 지정합니다.
-W : 모든 에러 메시지 출력
-w : 모든 에러 메시지를 출력 하지 않음
-I(아이) : 추가 헤더 파일이 있는 디렉토리를 지정합니다.

많이 사용되는 옵션을 축약했습니다.
외의 자세한 사항은 매뉴얼 명령어를 참고하시면 됩니다.
터미널을 여신 후 입력창에  'man gcc'를 입력합니다.

옵션은 네이버 ghrnis 님의 답변을 참고로 했습니다.

'scrap >  Linux' 카테고리의 다른 글

집에서 웹서버구축하는법  (1) 2011.02.14
linux 웹서버 구축  (0) 2011.02.14
linux gcc compile (컴파일 과정과 최적화)  (0) 2011.02.07
fedora linux emerald  (0) 2011.02.07
Linux 테마 사이트  (0) 2011.02.07