gcc는 웬만한 리눅스 디스트로(배포판)에
기본으로 설치되어 있습니다.
윈도우에서도 WSL2를 사용해서
우분투 같은 배포판을 설치하거나
혹은 VMWare로 가상머신에서
운영체제를 돌리는 방법으로
설치할 수 있습니다.
WSL2로 윈도우10에 리눅스 설치하기 / 리눅스용 윈도우 하위 시스템
C언어를 배우다 보면 컴파일에서는
IDE에 거의 의존하게 되는데
그러다 보면 놓치는 부분들이
생기게 됩니다. GCC를 사용하면
다시 초심을 찾는데 도움이
될지도 모르겠습니다.
어쨋든 원리적으로 설명하기엔
GCC가 좋은 것 같습니다.
이 포스팅은 프로그래밍에 대한
튜토리얼이 아니라 GCC 컴파일러에
대한 가이드입니다.
GCC 사용법을 레퍼런스 형식으로
리스트업 해놓은 것들은 이미
사용법을 알고 있는 사람에겐 편한데
GCC 자체를 모르는 사람에겐
막연하게 느껴집니다.
해서 약간의 설명을 곁들입니다.
GCC에 대한 포스팅은 처음이라
다소 부족하겠지만 차츰 보완이
될 거라 생각합니다.
그럼 바로 시작합니다.
*소스코드는 vi 에디터나 어떤 에디터건
상관은 없습니다. WSL2를 사용할 때는
비주얼 스튜디오 코드로 원격 접속해서
사용하는게 편해서 좋습니다.
파일이름 firstp.c 로 다음의 코드를 입력합니다.
Hello World 죠.
항상 처음에는 문자열을
출력시키는 코드입니다.
#include<stdio.h>
int main()
{
printf("GNU GCC turorial - 1\n");
return 0;
}
그 전에 gcc 의 버전을 확인합니다.
웬만하면 설치되어 있을 겁니다.
설치가 안되어있다면 리눅스 배포판에
따라서 설치해야 합니다.
gcc --version
어디에 설치되어 있는지 알고 싶다면
아래와 같이 찾아봅니다.
우분투 20.04는 usr/bin/gcc 라고 나오네요.
which gcc
컴파일을 해보겠습니다.
gcc firstp.c
이렇게 쌩으로만 해도 결과물이 나옵니다.
a.out이라는 파일이 실행파일입니다.
원래 우리가 알기로는
소스코드 -> 컴파일 -> 링킹
이 3단계 과정을 거쳐서 나온다고
알고 있는데 그냥 바로 링킹까지
완료되버립니다. 이것도 나중에는
파일의 갯수가 많아지면 별도로
컴파일 할 수 있습니다.
실행은 ./파일이름 으로 합니다.
./a.out
컴파일에서 아무 메시지가 안나오는 것은
실행이 잘 되었다는 것이고 실행시켜서
문자열이 잘 출력되면 성공입니다.
이것은 매우 단순한 경우이고
이제 옵션을 넣어보겠습니다.
GCC는 옵션이 중요합니다.
일단 출력파일의 이름을 바꾸고 싶다면,
-o (output의 약자) 옵션을 사용합니다.
이름을 firstprogram으로 바꾸려면
아래처럼 -o를 앞에 붙입니다.
gcc firstp.c -o firstprogram
역시 실행은 ./파일이름 입니다.
./ 은 현재의 디렉토리를 의미합니다.
./firstprogram
-Wall 은 warning - 컴파일시에
경고 사인을 보내주는 옵션입니다.
최근의 gcc 컴파일러는 성능이
향상되어서 인지 -Wall 옵션없이도
잘 잡아내는데 그렇다고 해도
안전을 위해 -Wall 옵션을 걸고
컴파일을 하는 습관을 가지는 것은
나중의 디버그를 위해 좋습니다.
#include<stdio.h>
int main()
{
printf("[GNU GCC turorial - 1]\n");
unsigned short x = 65537;
printf("overflow warning : %d\n", x);
return 0;
}
오버플로가 발생한 경고를 하고 있다.
$ gcc -Wall firstp.c -o over
firstp.c: In function ‘main’:
firstp.c:8:24: warning: unsigned conversion from ‘int’ to ‘short unsigned int’ changes value from ‘65537’ to ‘1’ [-Woverflow]
8 | unsigned short x = 65537;
| ^~~~~
$ ./over
[GNU GCC turorial - 1]
overflow warning : 1
여러개의 파일을 컴파일할 때는
컴파일과 링크를 분리할 수 있습니다.
C언어 교재의 처음에 컴파일은
목적코드(object code)를
생성한다고 배웠을 겁니다.
목적코드는 기계어이긴 한데
아직 실행코드나 외부 참조(reference)
주소 등이 확정되지 않은 파일입니다.
gcc 명령어는 컴파일과 링크를 동시에
해결하지만 나중에 링크를 해야하는 경우
혹은 파일이 너무 많거나 아직
모듈이 완성되지 않은 경우 컴파일과
링크를 분리하는 경우가 있습니다.
여러개의 파일을 컴파일을 하는 것은
다음 포스팅에서 다루겠습니다만
여기서는 과정을 분리하는 옵션입니다.
gcc -c firstp.c
firstp.c 는 firstp.o 라는 목적코드로
컴파일 됩니다. -c는 컴파일의 약자입니다.
gcc firstp.o -o myprogram
역시 gcc가 firstp.o라는 목적코드를
실행파일로 링크합니다. gcc 가
하는 것은 아니고 ld 라는 별도의
링크 프로그램에게 넘겨서
실행프로그램이 생성됩니다.
./myprogram 으로 실행할 수 있습니다.
우선은 가장 간단한 GCC 컴파일에
대해서 알아봤습니다. 보통 GCC로
C언어를 컴파일 하겠지만 이 외에도
Ada, 포트란, 자바 등 여러가지의
언어를 컴파일할 수 있는 콜렉션입니다.
대부분의 tutorial에서는 C언어를
기준으로 하기 때문에 우선
C언어 컴파일 부터 배워두는게
아무래도 빠를 것 같습니다.
GNU GCC 컴파일러 이야기 - GNU GCC 초보자 가이드 1