본문 바로가기

IT/Basic

크로스 컴파일(cross compile)

크로스 컴파일러(cross compiler)는 컴파일러가 실행되는 플랫폼이 아닌 다른 플랫폼에서 실행 가능한 코드를 생성할 수 있는 컴파일러이다. 크로스 컴파일러 툴은 임베디드 시스템 혹은 여러 플랫폼에서 실행파일을 생성하는데 사용된다. 이것은 운영 체제를 지원하지 않는 마이크로컨트롤러와 같이 컴파일이 실현 불가능한 플랫폼에 컴파일하는데 사용된다. 이것은 시스템이 사용하는데 하나 이상의 플랫폼을 쓰는 반가상화에 이 도구를 사용하는 것이 더 일반적이게 되었다.

 


A 머신(host) 에서 컴파일러를 돌려서 B 머신(target) 에서 동작하는 바이너리를 만드는 것을 크로스 컴파일이라고 합니다. 이때 사용하는 컴파일러가 크로스 컴파일러 입니다.

예를들어, 맥북에 안드로이드 스튜디오를 설치하고 소스코드를 빌드한 후 스마트폰 안드로이드 기기에서 빌드의 결과물인 apk 파일을 실행시킬 수 있는데요. 이 때 맥북을 host, 안드로이드폰을 target으로 해서 크로스 컴파일 했다 라고 말할 수 있겠죠. (넓은 의미에서)

 

같은 C언어로 만든 동일한 어플리케이션이더라도, 리눅스 우분투에서 실행시킬 때와 윈도우에서 실행시킬 때 실행되는 바이너리파일을 각각 열어 본다면 그 둘은 서로 다릅니다. 메모장 어플리케이션을 하나 만들었더라도 윈도우 98에서도 실행시키고 윈도우 10에서도 실행시키려면, 동일한 exe파일로는 안될거에요. 각각 운영체제에 맞는 실행파일이 필요합니다. 즉, 서로 다른 컴파일 방법이 필요합니다.

 

이런 차이는 하드웨어가 어느 회사의 어떤 제품인지, CPU가 몇 bit짜리 인지, 운영체제가 어떤 실행파일 타입을 사용하고있는지 등에 따라 생기게 됩니다. 어찌보면 자연스러운건데, 머신이 다르기 때문에 머신이 이해할 수 있는 바이너리의 형태가 다른거죠.

 

맥에서 C언어를 컴파일한다면 결과물은 맥에서 실행시킬 수 있는게 디폴트겠고 자연스럽지만, 윈도우 실행 프로그램을 맥에서 만들어야할 필요가 충분히 있을 수 있죠. 이게 바로 크로스 컴파일입니다.


크로스 컴파일러란?

 

 

다른 플렛폼에서(windows, Mac) 다른 플렛폼의(Android, IOS, Embedded) 실행 파일을 만들어 주는 컴파일러를 가르켜

크로스 컴파일러 라고 합니다.

 

 

이 무슨 말이냐??

 

예를 들어 Android의 .apk파일(어플리캐이션)을 만들고자 할 때 흔히 사용하는 소프트웨어가 있습니다.

바로 Android studio 입니다. 이 소프트웨어를 실행시킨 후 컴파일하면 실행파일이 만들어 집니다.

 

이 실행 파일은 windows에서 실행이 불가능 하죠. windows는 .exe파일만 실행 가능하기 때문입니다.

하지만 windows에서 스마트폰을 가상으로 띄우거나 직접 스마트폰에 apk파일을 넣은 후 직접 스마트폰으로 실행하면

어플리케이션은 실행이 잘 됩니다.

 

즉, 다른 플렛폼인 windows에서 다른 플렛폼에서 작동되는 .apk파일을 만들어 냈죠. 이를 가르켜 '크로스 컴파일' 이라고 합니다.

다시말해서 다른 플렛폼에서 작동되는 실행파일을 만들 때 사용하는 녀석입니다.

 

Linux에서 Embedded 실행파일을 만들 때,

windows에서 IOS 실행파일을 만들 때,

windows에서 Android 실행파일을 만들 때,

windows에서 Arduino 실행파일을 만들 때 등....

 

위 예시에서 개발을 위해 사용되는 컴파일러 모두가 크로스 컴파일러 라고 말합니다.

 

즉, 크로스 컴파일러는 하나의 명칭일 뿐, 보는 시각에 따라선 그냥 컴파일러가 될 수도 있다는 뜻입니다.

(예를들어 windows에서 visual studio를 다운받아 windows용 실행파일을 컴파일러를 통해 만들면 이것은 컴파일러가 되지만,

리눅스에서 visual studio를 다운받아 windows용 실행파일을 만들게 되면 이는 크로스 컴파일러가 되는 것입니다.)

 

 

그럼 왜 크로스 컴파일러를 사용하느냐?

 

 

이유는 단순히 생산성과 효율성 때문입니다.

기본적으로 스마트폰, 임베디드 같은경우에는 일반적인 Desktop PC 보다 성능이 떨어집니다.(cpu, ram, hdd 등......)

(스마트폰에 쓸 어플리케이션 개발을 위해서 스마트폰에 android studio를 설치해서 개발하지는 않잖아요?)

 

Desktop PC 에서 개발하는 것이 훨신 편하고 빠릅니다.

 

그렇기 때문에 다른 플랫폼에서 작동되는 실행파일을 만들기 위해 크로스 컴파일러를 사용하는 것입니다.

 

 

 

크로스 컴파일러란? 크로스 컴파일러 설치 방법!! (도전 임베디드 OS 만들기)

크로스 컴파일러란? 다른 플렛폼에서(windows, Mac) 다른 플렛폼의(Android, IOS, Embedded) 실행 파일을 만들어 주는 컴파일러를 가르켜 크로스 컴파일러 라고 합니다. 이 무슨 말이냐?? 예를 들어 Android의

hwan-shell.tistory.com

 

'IT > Basic' 카테고리의 다른 글

volatile 변수  (0) 2021.01.08
Debug mode, Release mode, Assert  (0) 2021.01.07
라이브러리 .a 파일 .so 파일  (0) 2020.10.22
동적 라이브러리(shared library)와 Linker/Loader 이해하기  (0) 2020.10.22
[Basic] DRAM, SRAM  (0) 2020.10.14