Overview
Open Robotics는 여러 플랫폼용 사전 빌드 ROS 2 패키지를 제공하지만, 다음 같은 이유로 크로스 컴파일을 쓰는 경우가 많다.
- 개발 머신과 목표 시스템이 다를 때 (예: x86 PC에서 ARM 보드용 빌드).
- 특정 코어 아키텍처에 맞춰 빌드할 때 (예: Raspberry Pi 3용
-mcpu=cortex-a53 -mfpu=neon-fp-armv8). - Open Robotics가 제공하는 사전 빌드 이미지가 지원하지 않는 파일시스템/환경을 타깃으로 할 때.
How does it work? (동작 방식)
외부 라이브러리에 의존하지 않는 단순한 소프트웨어는 네이티브 툴체인 대신 크로스 컴파일 툴체인만 쓰면 비교적 쉽게 크로스 컴파일할 수 있다.
다음 요소들이 있으면 복잡도가 올라간다.
- 타깃 아키텍처 지원: 빌드 대상 아키텍처를 소프트웨어가 지원해야 하고, 아키텍처별 코드(예: 어셈블리)는 타깃에 맞게 분리·활성화되어야 한다.
- 의존성 선행 준비: 모든 의존성(라이브러리 등)이 사전 빌드되거나 크로스 컴파일된 상태로 있어야, 그걸 쓰는 타깃 소프트웨어를 크로스 컴파일할 수 있다.
- 스택/빌드 도구: colcon처럼 여러 패키지를 한꺼번에 빌드할 때는, 빌드 도구가 각 패키지의 하위 빌드 시스템에 크로스 컴파일을 넘길 수 있는 방식을 제공해야 한다.
Alternatives (대안)
크로스 컴파일 대신 다중 플랫폼 Docker 이미지를 쓸 수 있다. docker buildx로 타깃 플랫폼용 이미지를 빌드하는 방식이다.