[Rust 공식문서 한국어 정리] ㊶. Rust 크로스 컴파일 가이드
[Rust 공식문서 한국어 정리] ㊶. Rust 크로스 컴파일 가이드
원문 제목: Cross-compilation — rustup documentation
작성자: Rustup Team
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📌 1. 서론 — 이 문서가 다루는 내용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
이 문서는 Rust에서 한 플랫폼에서 다른 플랫폼을 대상으로 바이너리를 빌드하는 크로스 컴파일을 설명합니다.
target triple의 개념, rustup target add 명령, 그리고 링커와 sysroot 설정을 다룹니다.
Linux에서 Windows용 바이너리를 빌드하거나, x86에서 ARM 임베디드를 대상으로 하는 방법을 중심으로 설명합니다.
cargo-zigbuild, cross와 같은 커뮤니티 도구를 활용하여 복잡한 시스템 의존성 문제를 해결하는 전략도 포함합니다.
임베디드, CI/CD, 멀티플랫폼 배포를 준비하는 개발자에게 필수적인 가이드입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔑 2. 핵심 개념 4가지
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
① Target Triple: 아키텍처-벤더-OS-ABI 형태로 표현되는 컴파일 대상 플랫폼 식별자입니다.
② rustup target: 크로스 컴파일 표준 라이브러리를 설치하고 관리하는 명령어입니다.
③ Linker: 대상 플랫폼용 링컈를 지정하여 크로스 컴파일된 객체 파일을 올바르게 연결합니다.
④ cross/cargo-zigbuild: Docker나 Zig를 활용한 크로스 컴파일 자동화 도구입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📖 3. 주요 내용 상세
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rust는 LLVM을 백엔드로 사용하므로, 이론적으로 LLVM이 지원하는 모든 타겟으로 크로스 컴파일이 가능합니다.
rustup target list로 사용 가능한 타겟을 확인하고, rustup target add x86_64-pc-windows-gnu처럼 설치합니다.
설치 후 cargo build --target x86_64-pc-windows-gnu 명령으로 해당 타겟용 바이너리를 빌드할 수 있습니다.
링커 설정은 .cargo/config.toml에서 지정합니다.
[target.x86_64-pc-windows-gnu] linker = "x86_64-w64-mingw32-gcc" 형태로 크로스 링커 경로를 명시합니다.
링커가 없거나 잘못 설정되면, 컴파일은 성공필도 링크 단계에서 오류가 발생합니다.
표준 라이브러리 외에도 C 의존성이 있는 경우 sysroot나 크로스 컴파일 환경이 필요합니다.
OpenSSL, zlib 등의 네이티브 라이브러리를 대상 플랫폼용으로 미리 빌드해야 합니다.
이 과정이 복잡하므로, 커뮤니티 도구를 활용하는 것이 일반적입니다.
cross는 Docker 컨테이너를 사용해 완전한 크로스 컴파일 환경을 제공합니다.
cross build --target armv7-unknown-linux-gnueabihf 명령만으로 필요한 툴체인과 시스템 라이브러리가 설치된 환경에서 빌드됩니다.
Docker가 필요하며, CI 환경에서도 일관된 크로스 빌드를 보장합니다.
cargo-zigbuild는 Zig 컴파일러를 링커로 사용하여 C 의존성의 크로스 컴파일을 단순화합니다.
Zig는 내장된 libc와 크로스 컴파일 기능을 제공하므로, 별도의 sysroot 설정 없이도 다양한 타겟을 지원합니다.
설치가 간편하고 빌드 속도가 빠륵므로, 개발 환경에서 크로스 컴파일을 빠르게 테스트할 때 유용합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🛠 4. 실전 활용
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
GitHub Actions에서 cross를 사용해 Linux, Windows, macOS, ARM용 바이너리를 동시에 빌드합니다.
임베디드 타겟(thumbv7m-none-eabi)을 위해 rustup target add 후 probe-rs로 플래싱합니다.
cargo-zigbuild로 musl 타겟용 정적 바이너리를 생성하여 배포 의존성을 제거합니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 5. 정리
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Rust의 크로스 컴파일은 rustup target과 적절한 링커 설정으로 기본적으로 지원됩니다.
C 의존성이 있을 때는 cross나 cargo-zigbuild로 환경 구성 부담을 줄입니다.
멀티플랫폼 배포와 임베디드 개발에서 크로스 컴파일은 필수 능력입니다.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🔗 출처 링크
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
원문: https://rust-lang.github.io/rustup/cross-compilation.html
cross: https://github.com/cross-rs/cross
#Rust #CrossCompilation #rustup #Target #Embedded #CI #번역

오뉴노노 님의 최근 댓글
ㅋㅋㅋㅋㅋ 2019 01.14 잘 읽었습니다 2018 12.30 포인트가 없어서 아직 시작을 못하고있는데요! 글은 잘 읽었습니다! 포인트 쌓고 도전할거에요 2018 12.30