본문 바로가기

Development Experience/Rust

Rust Cross Compile

 

 

Rust의 가장 큰 특징 중 하나는 하나의 코드로 여러 OS의 실행 파일을 만들 수 있다는 점이다.

이 글에서는 Ubuntu 에서 빌드한 실행 파일을 Ubuntu와 CentOS, Windows에서 사용했던 과정을 정리한다.

나는 Windows PC를 Main Build Machine으로 사용중이어서 WSL을 설치했는데,

Ubuntu OS에서 바로 빌드하고 싶다면 2번 과정부터 진행하면 된다.

 

1. [Windows] Powershell에서 WSL (Windows Subsystem for Linux) 설치

- powershell을 관리자 권한으로 실행하여 아래 명령을 입력한다.

wsl --install

 

 

2. [Ubuntu] rustup 설치

- 아래 명령으로 rustup을 설치한다. (Windows의 경우 WSL에 진입한 후 진행한다)

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

 

 

3. [Ubuntu] musl-tools 설치

- ubuntu의 패키지를 최신으로 업데이트하고 musl-tools 패키지를 로컬에 설치한다.

sudo apt-get update
sudo apt-get install musl-tools

 

 

4. [Ubuntu] linux-musl 툴체인 및 windows 툴체인 설치

- target OS별로 필요한 툴체인을 설치해야 한다.

   Windows와 Linux는 Tier 1 이어서 툴체인 제공이 원활했는데
   FreeBSD와 Solaris 같은 Tier 2 Unix OS는 툴체인 활용이 쉽지 않아 일단 보류했다..ㅠ

# Linux
rustup target add x86_64-unknown-linux-musl

# Windows
rustup target add x86_64-pc-windows-gnu

 

 

5. [Ubuntu] cargo 전역 파일에서 링커 설정

- WSL을 사용하는 Windows 기준으로 cargo 전역 파일은 "C:\Users\{사용자명}\.cargo\config.toml" 에 위치한다.

   Linux의 경우 "~/.cargo/config.toml"에 위치한다.

[target.x86_64-unknown-linux-musl]
linker = "musl-gcc"

 

 

6. [Ubuntu] Rust 프로젝트 빌드

- build target 을 지정하여 Rust 프로젝트를 빌드하면 해당 OS에 맞는 실행 binary가 생성된다.

   Windows의 경우 .exe 파일이 생성되고 Linux의 경우 확장자가 없는 실행파일이 생성된다.

cd  /mnt/c/work.cybms/server

# Ubuntu, CentOS
cargo build —-release -—target x86_64-unknown-linux-musl

# Windows
cargo build --release --target x86_64-pc-windows-gnu

 

 

7. [Ubuntu] 빌드 결과물을 TestVM에서 실행

- 파일을 옮기는 과정에서 실행 권한이 사라질 경우 실행권한(+x) 옵션을 주어야 되는 경우도 있다.

chmod +x cc_test
.\cc_test
반응형