크로스 컴파일 (cross compile) 이란? 쉬운 설명!


cross-compile

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

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

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

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

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