크로스 컴파일: PC에서 ARM 보드용 빌드
성능이 좋은 PC에서 다른 아키텍처용 실행 파일을 만드는 툴체인. sysroot와 라이브러리 버전이 맞아야 보드에서 돕니다.
왜 크로스 컴파일인가
임베디드 보드에서 직접 빌드하면 느리고 저장 공간도 부족합니다. 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를 연결하면 원격 디버깅도 됩니다.