컴파일 과정과 사용법 gc c/g++

gcc / g++란?

GCC는 GNU 프로젝트(리처드 스톨먼의 주도 하에 시작된 공개 소프트웨어 프로젝트)의 일환으로, 원래는 C 언어만의 컴파일러였지만, 현재는 C++, 자바 등 복수의 언어를 컴파일 할 수 있다. 이로 인해 이름도 바뀌었는데 원래는 “GNUC Compiler”였으나 현재는 “GNU Compiler Collection”이다.

컴파일은 고급언어(C, C++, 자바 등)를 저급언어(어셈블리아, object코드, 기계어)로 바꾸는 일련의 과정이다. 컴파일러는 컴파일을 해주는 프로그램이다

test.c라는 파일을 GCC에 컴파일 하는 과정은 이와 같다.

  1. 전처리

저는 C++니까 테스트.cpp으로 하겠습니다.

test . cpp 은

이렇게 해요.

그럼 test.cpp을 test.i로 바꿔보겠습니다.

명령어-E: 전처리-o: 결과를 포함하는 파일 지정

GCC(GNU Compiler Collection)에서 C 컴파일러를 쓰려면 gcc, C++ 컴파일러를 쓰려면 g++를 쓰면 됩니다.

결과

10줄이었던 코드가 26563줄이 됐어요

test.cpp에 있던 #include<iostream>처럼 해시기호(#)로 시작하는 줄은 전처리 지시자라고 부릅니다.#include<file>은 지정한 file의 내용을 현재 소스파일로 지시자가 있는 장소에 삽입합니다. 따라서 1~26557 줄에 해당하는 내용은 C++ 표준 라이브러리 중 하나인 iostream 입니다.

2) 컴파일러

컴파일러는 전에 처리된 파일을 어셈블리아에 컴파일 해줍니다.그럼 test.i를 test.s로 바꿔볼게요

명령어-S: 코드를 어셈블리아에 컴파일-o: 결과를 저장할 파일을 지정

C언어라면 gcc로! 결과

코드가 117줄로 줄었어요이는 어셈블리아에 컴파일하는 과정에서 실제로 호출하여 사용되는 부분만 컴파일하기 때문입니다.

3) 어셈블러

어셈블러는 어셈블러를 기계어로 변환합니다. 이렇게 변환된 파일을 object 코드라고 합니다. Linux는 .o, Windows는 .obj와 확장자를 따로 사용합니다.

명령어-c: 코드를 기계어로 변환-o: 결과를 넣을 파일을 지정

C언어는 gcc로! 결과

“파일이 이진되거나 서포트되지 않은 텍스트 인코딩을 사용하므로 에디터에 표시되지 않습니다. 그래도 열어요?한 줄로 줄 줄었어요기계어로는 볼 수 없어요

4. 링커

링커는 만들어진 objec t코드를 하나로 묶어서 실행 파일을 만듭니다.

명령어 -g: 실행 파일 만들기 -o: 결과를 저장할 파일을 지정

C언어는 gcc에서!

o에 파일명을 지정하지 않으면 자동으로 창의 경우, a.exe파일을 리눅스의 경우, a.out파일을 작성합니다.

결과 생성된 test.exe 파일을 실행하면

Hello World가 출력됩니다!

error: Content is protected !!