본문 바로가기

프로그램 언어

[ C / C ++ ] 프로그램하기전 지식

우리가 일반적으로 '코딩한다' 라고 하는 것은 .c , .cpp 등 소스 코드를 작성 하는 것이다.

하지만 이 소스 코드들은 컴퓨터가 바로 실행하지 못한다.

*인터프리터 언어, 즉 스크립트(ex. python)의 경우에는 바로 실행이 가능하다. 

컴퓨터가 우리가 작성한 소스 코드를 실행하기 위해선 기계가 알아들을 수 있는 기계어로 번역하는 과정이 필요한데 이걸 빌드(build)라고 하고 이 역할을 해주는 프로그램을 빌더(builder)라고 한다.

 빌드에는 2가지 단계가 존재한다.

소스코드를 기계가 알아들을 수 있는 수준으로 번역하고 object file( .o 확장자 )을 생성하는 컴파일(compile) , 분리된 object file을 모아서 하나의 실행파일을 만드는 링크(link)가 있다.

여기서 컴파일을 하는 프로그램을 컴파일러(compiler) , 링크를 하는 프로그램을 링커(linker)라고 한다.

컴파일을 하면 object file이 생성이 된다고 했는데 이걸 여러개 연결하는 작업인 링크가 왜 필요할까??

아래 코드 예시를 보자.

#include "my_header.h"
#include <iostream>

int main(int argc , char** argv){
	std::cout<<"Hello Wolrd!!"<<std::endl;
	my_fun();	//my_header.h에 선언된 함수
    return 0 ;
}

코드에서 my_header.h와 iostream을 가져다 쓰는 걸 확인 할 수 있다. 이렇게 하나의 실행파일을 위해 여러개의 파일이 필요할 때 각각의 파일을 먼저 컴파일 해서 object file을 만든 후, 필요한 것만 찾아서 연결시키는 링크 작업이  생겨나게 된것이다.

따라서 프로그램을 빌드하기 위해선 빌더에게 컴파일과 링크를 어떻게 해야 하는지 ( ex. 파일 경로 , 라이브러리 사용 등) 알려주어야 한다.

하지만 일반적으로 알고있는 Visual studio같은 코드 편집기을 사용 할 때 일일이런 작업을 해주지 않았다. 이는 사용하던 프로그램이 메모장 같은 일반적인 편집기가 아니라 IDE(통합 개발 환경)이기 때문이다. 예를 들어 Visual studio에서 프로젝트를 만들고 run을 누르게 되면, Visual studio 내부적으로 프로젝트에 맞게 빌드를 하고 실행파일을 실행시킨다.

일반적으로 로봇을 하다 보면 linux환경에서 작업을 하게 되고, 여러 라이브러를 사용 할 때나 코딩을 할 때 이러한 빌드 과정을 알아야 할때가 많다.

linux에선 C / C++ 빌더로 gcc / g++를 제공한다. 만약 터미널 창에서 안깔려 있다고 뜰 경우 다음을 터미널 창에 입력하면 된다.

sudo apt install gcc -y
sudo apt install g++ -y

이제 코드를 빌드하기 위한 빌더가 준비되었다.

gcc / g++을 사용하는 법은 터미널 창에 소스코드가 있는 경로에서 다음과 같이 입력하면 된다.

gcc [빌드할 파일 이름]			// .c 파일 빌드
g++ [빌드할 파일 이름]			// .cpp 파일 빌드

예를 들어 내가 ~/cpp_study/ 란 폴더에 build_test.cpp란 파일을 만들었으면 다음과 같이 입력하면 된다.

~$ cd /cpp_study
~/cpp_study$ ls
build_test.cpp
~/cpp_study$ g++ build_test.cpp

이렇게 빌드하면 a.out이라는 실행파일이 생생될 것이다. 

여기서 만들어지는 실행파일의 이름을 정해주고 싶으면 다음과 같이 입력하면 된다.

gcc -o [만들어질 실행파일 이름] [빌드할 파일 이름]
g++ -o [만들어질 실행파일 이름] [빌드할 파일 이름]

위와 같은 예시를 들면 다음과 같다

~/cpp_study$ g++ -o my_code build_test.cpp

이제 a.out이라는 실행파일 대신 my_code라는 실행 파일이 생성되었을 것이다.

그럼 이제 다른 라이브러리를 사용할 때는 어떻게 해야 할까??

빌드 명령어 뒤에 추가 적인 설명을 붙여 주면 된다.

예를 들어 pthread 라이브러리를 사용 할 때에는 다음과 같이 입력하면 된다.

g++ -o [만들 실행파일 이름] [빌드할 코드] -lpthread

gcc / g++의 자세한 설정들은 여기서 다루지 않겠다.

이상 빌드의 개념과 간단한 빌드하는 법의 포스팅을 마친다.

 

 

혹시 내용 틀린거나 궁금한거 있으면 댓글로 알려주세요

'프로그램 언어' 카테고리의 다른 글

[CMake] CMake 간단한 설명 + 예제  (2) 2021.02.18
[ C / C++ ] make , Makefile  (1) 2021.01.30