그라운드 임베디드 유튜브 구독

노트 / 임베디드 리눅스

크로스 컴파일: PC에서 ARM 보드용 빌드

성능이 좋은 PC에서 다른 아키텍처용 실행 파일을 만드는 툴체인. sysroot와 라이브러리 버전이 맞아야 보드에서 돕니다.

GROUND EMBEDDED · 정리 노트임베디드 리눅스 02크로스 컴파일 1aarch64-linux-gnu-gcc -o hello hello.c 2file hello # ELF 64-bit LSB execut… 3scp hello root@board:/tmp/

왜 크로스 컴파일인가

임베디드 보드에서 직접 빌드하면 느리고 저장 공간도 부족합니다. x86 PC에서 ARM용 실행 파일을 만들어 보드로 옮깁니다.

툴체인 이름

aarch64-linux-gnu-gcc = 대상 아키텍처(aarch64) - 운영체제(linux) - ABI(gnu) - 도구(gcc)

대상 툴체인 예
64비트 ARM 리눅스 aarch64-linux-gnu-
32비트 ARM 리눅스 (하드 float) arm-linux-gnueabihf-
MCU (운영체제 없음) arm-none-eabi-
aarch64-linux-gnu-gcc -o hello hello.c
file hello      # ELF 64-bit LSB executable, ARM aarch64
scp hello root@board:/tmp/

sysroot

보드의 헤더 파일과 라이브러리 묶음입니다. 보드에 설치된 glibc 버전보다 새 버전으로 빌드하면 "GLIBC_2.34 not found" 같은 오류가 납니다. 보드 이미지를 만든 Yocto/Buildroot가 만들어 준 SDK의 툴체인과 sysroot를 쓰면 맞습니다.

빌드 시스템

CMake에서는 툴체인 파일로 컴파일러와 sysroot를 지정합니다. 보드 GDB 서버(gdbserver)와 PC의 gdb-multiarch를 연결하면 원격 디버깅도 됩니다.