라즈베리파이용 Rust 컴파일

Situation

Rust를 공부하면서 활용하는 방안을 생각하던 중, Rust가 C/C++을 대체하는 빠른 언어라는 점에서 라즈베리파이와 잘 어울린다는 글을 읽었습니다. 그래서 아무 생각없이 라즈베리파이에서 Actix를 컴파일 했더니...몇시간 걸리더군요 ㅡ.ㅡ 사실 너무 오래 걸려서 중간에 끊었습니다.

그리고 크로스컴파일을 하기로 했습니다. arm64에서 이미 한번 해봤기때문에 별로 어려울 건 없었습니다.

Task

  • Rust project 생성
  • 컴파일 환경 세팅
  • 크로스컴파일
  • 실행파일 라즈베리파이로 전송 및 실행
뭔가 많은 부분이 생략된 것같지만, 진짜 기분탓입니다. 그냥 이렇게 하면 간단하게 끝납니다.

Action

Rust Project 생성

Hello Rust 프로젝트 하나 생성합니다. rust 설치는 여기서 다루지 않습니다.
$ cargo new hellorust
     Created binary (application) `hellorust` package
$ cd hellorust/

컴파일 환경

크로스컴파일러를 설치하고 러스트에 컴파일 타겟을 지정합니다.

sudo apt install gcc-arm-linux-gnueabihf
rustup target add armv7-unknown-linux-gnueabihf

크로스컴파일

설치한 크로스컴파일러의 링커를 설정해 줍니다. .cargo/config 파일을 생성하고 아래 내용을 붙여넣기합니다.

[target.armv7-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
타겟을 지정해서 컴파일 합니다.
$ cargo build --target=armv7-unknown-linux-gnueabihf
   Compiling hellorust v0.1.0 (/mnt/d/work/hellorust)
    Finished dev [unoptimized + debuginfo] target(s) in 4.59s
$ file target/armv7-unknown-linux-gnueabihf/debug/hellorust
target/armv7-unknown-linux-gnueabihf/debug/hellorust: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, BuildID[sha1]=67f1da8d5a447570422abb0b18596319c27870d0, for GNU/Linux 3.2.0, with debug_info, not stripped
ARM 32bit로 잘 컴파일 되었네요.

실행파일 라즈베리파이로 전송 및 실행

scp로 라즈베리파이로 전송하고,
scp target/armv7-unknown-linux-gnueabihf/debug/hellorust pi@192.168.1.144:/home/pi/
bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
hellorust                                                                                                               100% 3271KB  10.1MB/s   00:00
라즈베리파이에서 실행해봅니다.
$ ./hellorust
Hello, world!
잘 되네요!

Result

라즈베리파이에서 주로 파이썬으로 이것저것 만졌는데 Rust 로 넘어갈 생각에 크로스컴파일 환경을 만들어봤습니다. 스크립트로 자동화해서 사용해야겠습니다.

참고자료



댓글

이 블로그의 인기 게시물

WSL2 Ubuntu 20.04 및 네트워크 설정

리눅스 멀티코어를 사용하는 tar 압축/해제

git pull 을 했더니 branch가 갈라지는 경우