GCC C언어 컴파일

gcc는 웬만한 리눅스 디스트로(배포판)에

기본으로 설치되어 있습니다.

 

윈도우에서도 WSL2를 사용해서

우분투 같은 배포판을 설치하거나

혹은 VMWare로 가상머신에서

운영체제를 돌리는 방법으로

설치할 수 있습니다.

 

WSL2로 윈도우10에 리눅스 설치하기 / 리눅스용 윈도우 하위 시스템 

 

WSL2로 윈도우10에 리눅스 설치하기 / 리눅스용 윈도우 하위 시스템

WSL2 설치하기 WSL2는 윈도우10에서 리눅스를 사용할 수 있는 시스템 소프트웨어입니다. 그동안 윈도우를 설치한 PC에서 리눅스를 사용하기 위해서는 멀티 부팅 기능을 사용하여 하드 파티션을 나

digiconfactory.tistory.com

 

 

C언어를 배우다 보면 컴파일에서는

IDE에 거의 의존하게 되는데

그러다 보면 놓치는 부분들이

생기게 됩니다. GCC를 사용하면

다시 초심을 찾는데 도움이

될지도 모르겠습니다.

 

어쨋든 원리적으로 설명하기엔

GCC가 좋은 것 같습니다.

 

이 포스팅은 프로그래밍에 대한

튜토리얼이 아니라 GCC 컴파일러에

대한 가이드입니다.

 

 

GCC 사용법을 레퍼런스 형식으로

리스트업 해놓은 것들은 이미

사용법을 알고 있는 사람에겐 편한데

GCC 자체를 모르는 사람에겐

막연하게 느껴집니다.

해서 약간의 설명을 곁들입니다.

 

GCC에 대한 포스팅은 처음이라

다소 부족하겠지만 차츰 보완이

될 거라 생각합니다.

 

그럼 바로 시작합니다.

 

*소스코드는 vi 에디터나 어떤 에디터건

상관은 없습니다. WSL2를 사용할 때는

비주얼 스튜디오 코드로 원격 접속해서

사용하는게 편해서 좋습니다.

 

리눅스 vi 에디터 사용법 기초 | 우분투

 

리눅스 vi 에디터 사용법 기초 | 우분투

vi 에디터 실행하기 vi 에디터는 터미널에서 vi 를 입력해서 실행합니다. vi 에디터는 향상된 vi 에디터라는 의미의 vim Vi IMproved 을 의미합니다. 윈도우 환경에 익숙한 사람들은 약간 혼동스러울 것

digiconfactory.tistory.com

 

 

WSL2 비주얼 스튜디오 코드 개발환경 설치하기 - 윈도우11

WSL2 개발환경 WSL2에서의 개발환경 설정하는 방법은 여러가지가 있습니다. 마이크로소프트에서 권장하는 방법 중 하나는 비주얼 스튜디오 코드의 확장 기능으로 리눅스에 원격으로 접속하는 것

digiconfactory.tistory.com

 

파일이름 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언어 컴파일 부터 배워두는게

아무래도 빠를 것 같습니다.

 

https://gcc.gnu.org/

 

GCC, the GNU Compiler Collection - GNU Project

GCC, the GNU Compiler Collection The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, Go, and D, as well as libraries for these languages (libstdc++,...). GCC was originally written as the compiler for the GNU operating sy

gcc.gnu.org

 

 

 

 

 

GNU GCC 컴파일러 이야기 - GNU GCC 초보자 가이드 1

 

GNU GCC 컴파일러 이야기 - GNU GCC 초보자 가이드 1

GNU GCC 컴파일러 요즈음은 상당히 사용자 친화적인 프로그래밍 언어가 많이 나와서 정말 누구나 남녀노소 컴퓨터로 코딩을 배울 수 있습니다. 코딩(Coding), 프로그래밍(Programming) 같은 비슷하면서

digiconfactory.tistory.com

 

공유하기

facebook twitter kakaoTalk kakaostory naver band