정의:
gcc는 리눅스에서 사용하는 컴파일러의 한 종류이다. 가장 널리 알려지고 사용되는 컴파일러이다.
사용방법 :
비쥬얼스튜디오에서 프로젝트를 하나만들어서 c코드를 만든다고 생각해보자
test.c 라는 파일을 만들고 코드를 작성한다.
그러고나서 빌드를 누르면 하나의 exe 파일이 생성된다.
리눅스에서도 똑같은 test.c 라는 파일을 만든다.
근데 리눅스에는 비쥬얼스튜디오가 없다. 이 c파일을 어떻게 빌드해서 실행파일을 만들어낼까?
참고로 리눅스에서는 실행파일 확장자가 .exe가 아니라 .out이 나온다.
이때 사용하는게 gcc 컴파일러다.
test.c라는 소스코드가 위치한 디렉토리에서 cmd를 연다.
그리고나서 다음과 같이 입력한다
gcc test.c
이렇게 입력하고 엔터를 누르면 a.out이라는 실행파일이 생성된다.
이것이 기본적인 gcc 를 이용한 빌드방법의 가장 기초적인 형태이다.
이 명령의 의미는 gcc라는 컴파일러를 실행해서 컴파일을 할 건데, 컴파일 할 대상파일은 test.c 이다.
라고 명령한 것이다.
이 때, gcc 컴파일러는 아웃풋 파일의 이름을 사용자가 임의로 지정해주지 않으면 무조건 아웃풋 파일 이름이 a.out 이다.
그래서 gcc test.c 라고 명령을 내리면
a.out 이라는 실행파일이 생성되는 것이다.
환경변수에 대하여
참고로, cmd환경에서 gcc라고 입력한것은 사실 gcc라는 프로그램을 실행시킨다는 명령이다.
그런데, test.c 가 존재하는 디렉토리에서 gcc 프로그램을 실행하려면 gcc 파일도 같은 디렉토리 내에 존재해야한다.
하지만, 이런식으로 쓰려면 소프트웨어 프로젝트를 만들때마다 프로젝트 각각에 gcc 를 넣어야한다.
이런 현상을 막기 위해서 윈도.리눅스에는 환경변수라는 파라미터가 존재하는데,
특정 경로(디렉토리의 위치)를 환경변수로 등록해놓으면
cmd 상에서 어떤 sw를 실행시킬때, 현재 디렉토리에 없더라도 환경변수에 등록된 디렉토리를 뒤져서 sw를 실행시킨다.
따라서, 환경변수에 gcc설치경로를 추가시켜 놓으면 cmd어느 위치에서나 gcc를 통한 빌드가 가능해진다.
한편 gcc 컴파일러에는 다양한 옵션들이 있는데 그 중 쉽고 간단한 것들 몇개만 알아보자.
-o 옵션 : 빌드 결과 생성되는 Output 파일의 이름을 유저가 지정가능함
gcc -o test_out test.c
위 명령이 정상적으로 실행되서 빌드가 끝나면 test_out.out 실행파일이 생성 될 것임
-l 옵션: 표준라이브러리가 아닌 라이브러리를 빌드 할 때 사용하는 경우 사용
(소문자 엘이다)
gcc test.c -lmylib
(위 예시의 경우 빌드에 포함시키려는 라이브러리의 이름이 mylib 이다.)
-L옵션:표준라이브러리가 아닌 라이브러리 사용시, 해당 라이브러리의 경로가 현재 위치가 아니라 다른 곳에 있을 경우 경로를 표시할 때 사용하는 옵션
gcc test.c -lmylib -Labc/def/g
예시의 경우, 빌드에 포함시키려는 라이브러리 이름은 mylib이고, 해당 라이브러리는 현재 위치에서 abc/def/g 라는 폴더에 들어있음
-c 옵션: 실행 가능 파일이 아니라 .o 파일만 생성함(오브젝트 파일생성)
gcc test.c -c
이 경우 아웃풋 파일의 이름 : test.o 가 됨
-I 옵션: 헤더파일을 include path에 추가
(대문자 I 임)
gcc를 이용한 소스코드 컴파일 방법 심화
여러개의 파일을 사용하여 빌드하는 경우
ex)
test1.c , test2.c 를 함께 빌드 하는 경우
gcc-c test1.c
gcc-c test2.c
gcc -o test test1.o test2.o
위 코드를 해석해보자.
-c 옵션은 오브젝트 파일을 만드는 옵션이라 하였다.
gcc-c test1.c -> 실행결과 test1.o 생성
gcc-c test2.c -> 실행결과 test2.o 생성
gcc -o test test1.o test2.o -> test1.o , test2.o 를 이용해서 빌드 하고, 이때 생성되는 아웃풋 실행파일의 이름은 test 로 한다.
위의 3줄 내용을 한줄로도 표현 할 수 있는데
gcc -o test test1.c test2.c
이렇게 적으면 앞에 3줄에서 했던 것이 내부적으로 한번에 실행된다.
(test1.o 오브젝트 만들고 test2.o 오브젝트 만들고 이거 합쳐서 test 라는 아웃풋 만들기)
'프로그래밍 관련 > 프로그래밍 관련 잡지식' 카테고리의 다른 글
비트코인에 대하여(2) utxo (2) | 2021.04.21 |
---|---|
비트코인에 대하여(1) 개요 (1) | 2021.04.20 |
VS Code. Extension Offline 설치 (0) | 2021.04.19 |
REST API. 그리고 JWT 토큰 & 인증에 대하여 (2) | 2021.04.15 |
REST API에 대하여(Feat. 업비트 API) (0) | 2021.04.14 |