크로스 컴파일이란?

mommers·2026년 3월 12일

Linux

목록 보기
55/59

전 교수님 수업시간에 엣지 환경(라즈베리파이5)에서 리눅스 드라이버를 설치할 때 시간이 40분 정도 걸렸었다.

원래 이정도 걸리는거구나 하고 넘어갔었는데, 우분투 환경에서 똑같은 파일을 설치하면 10분도 안 걸릴수도 있다고 한다.

크로스 컴파일을 들어보기만 해서 정확한 개념을 몰랐는데, 오늘 크로스 컴파일에 관련된 수업을 나가면서 한번 더 정리하고자 한다.


크로스 컴파일?

엣지 환경(ex. 라즈베리파이)과 로컬 환경(ex. Ubuntu)를 서로 연결하여, 하드웨어적으로 성능이 더 좋은 Ubuntu 환경에서 라즈베리파이에서 사용할 파일을 더 좋은 환경에서 컴파일해주는 과정을 말한다.

여기서 아키텍처에 대한 이해가 필요한데, 똑같은 GCC를 사용해도 실행 파일이 서로 다르다.

$ file copy_ubuntu
copy_ubuntu: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=3c544c2beda41ca3b92c08cdec58487bc39956fa, for GNU/Linux 3.2.0, not stripped

$ file copy_rpi
copy_rpi: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-aarch64.so.1, BuildID[sha1]=7fd06a2a6076fe3453650e474e175ddc3ccbfc54, for GNU/Linux 3.7.0, not stripped

자세히 보면

  • 윈도우 : x86-64
  • RaspberryPi : Arm aarch64

서로 다른 파일임을 확인할 수 있다.

윈도우에서 컴파일한 파일을 그대로 라즈베리파이에 옮겨 실행시켜준다면, 실행되지 않는다.

따라서, 윈도우 환경의 우분투에서 라즈베리파이용 실행 파일을 만들어주기 위해서는 cross-compile용 toolchain을 설치 해야한다.

# ubuntu에서 라즈베리파이용(arm) 32bit cross-compile 설치
$ sudo apt-get install gawk git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat cpio python-setuptools python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev xterm rsync curl zstd lz4 bison flex libssl-dev libgnutls28-dev libncurses5-dev
$ sudo apt install crossbuild-essential-armhf //arm toolchain 설치


# ubuntu에서 라즈베리파이용(arm) 64bit cross-compile 설치
$ sudo apt update
$ sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
$ aarch64-linux-gnu-gcc -v
$ aarch64-linux-gnu-gcc copy.c -o copy_arm
$ file ./copy_arm

우분투에서 설치를 진행해야하고,
우분투에서 컴파일한 copy_arm 파일을 라즈베리파이로 옮겨주고 실행해보면 실행되는 것을 확인할 수 있다.

profile
임베디드 개발자가 되기 위해 공부중입니다!

0개의 댓글