라즈베리파이용 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 로 넘어갈 생각에 크로스컴파일 환경을 만들어봤습니다. 스크립트로 자동화해서 사용해야겠습니다.
댓글
댓글 쓰기