[ Rust ] Cross-compile의 개념과 방법

Lutica_·2025년 6월 6일

Cross-compile

  • 일반적인 저수준 언어들은 고급언어에서 바로 어셈블리어로 변환하는 경우가 있는데, 이때
  • Rust는 C/C++과 비슷하게 (LLVM을 거친 다음) 바로 어셈블리어로 변환한다.
  • 그런데, 컴퓨터마다 어셈블리어가 다른 경우가 있어서, 양질의 연산량을 가진 컴퓨터에서 컴파일 하여 저가의 HW를 사용하려는 경우, target-platform에 변화를 주어야 한다.
  • 특히, Rust는 강력한 타입 시스템과 LLVM 기반의 고도화된 최적화 과정을 거친다.
  • 때문에 컴파일 시 메모리와 컴퓨팅 자원이 큰 환경에서 컴파일 이후 낮은 환경에서 실행하는 것이 정신건강에 이로울 수 있다.
  • AWS의 낮은메모리 환경(Scale-downed된 환경)의 경우에도 도움이 될 것으로 보인다. (가끔 컴파일을 서버에서 수행했다가 Out Of Memory가 나서 서버에서 끊기는 경우가 있다.)

Rust 사전 설정

사전 설치되어야 할 환경

  • Cargo 및 Rustup이 설치되어야 한다.
  • Linux 기준 설치방법은 아래와 같다.
$ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh
  • 다른 운영체제는 여기를 참고한다.

다른 target-platform compile 도구 설치

자세한건 여기 참고

  • 아래 명령어중 target부분을 바꾸고 설치한다.
$ rustup target add --toolchain <toolchain> <target>...
# e.g. rustup target add aarch64-unknown-linux-musl
# 리스트는 rustc --print=target-list로 볼 수 있다.
  • 설치된 툴 체인은 아래와 같이 확인 가능하다.
$ rustup toolchain list
stable-x86_64-unknown-linux-gnu (active, default)

실행

cargo build --target=<원하는 플랫폼>
  • 이렇게 하면 빌드가 된다. run로 변경시 시뮬레이션이 가능하다.

  • 만약 C등의 외부 라이브러리가 종속된 경우라면, 링커 설정이 필요하며, 혹시 가상환경을 쓸 가능성이 존재한다면 cross를 사용하는 것을 추천한다.

profile
해보고 싶고, 하고 싶은 걸 하는 사람

0개의 댓글