윈도우에서 리눅스용 Rust 크로스컴파일

Rust 크로스 컴파일을 윈도우에서 하는 방법을 찾아보고 여기에 정리합니다. 타깃은 x86 리눅스입니다.

1. toolchain 추가

rustup target list

위 명령으로 지원하는 toolchain 목록을 볼 수 있습니다. 러스트 공식문서에서도 확인 가능합니다.

rustup target add x86_64-unknown-linux-musl

 

2. 샘플 프로젝트 생성

cargo new crossbuild

cargo new 명령으로 간단하게 샘플 파일을 만듭니다.

fn main() {
    println!("Hello, world!");
}

main.rs 파일의 내용은 위와 같습니다.

 

3. 링커 추가 & 빌드

linker 'cc' not found

툴체인을 추가하고 빌드를 하면 linker cc를 찾을수 없다는 에러가 납니다.

%HOMEPATH%/.cargo/

위 경로 폴더에 있는 config 파일에 cc에 관한 설정을 추가해야 합니다. 파일이 없으면 새로 생성합니다.

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

cargo build --target=x86

cargo build --target=x86_64-unknown-linux-musl

다시 빌드 하면 잘 됨.

 

4. 실행

Hello, World!

C:testcrossbuildtargetx86_64-unknown-linux-musldebugcrossbuild 파일을 리눅스에 업로드 후 실행권한을 준 뒤 실행함.

 

5. 잡담

  • 1티어 툴체인인 “x86_64-unknown-linux-gnu” 를 안쓰고 2티어 툴체인인 “x86_64-unknown-linux-musl”를 사용한 이유는 빌드 에러때문이고 간단하게 키워드만 적으면 dynamic lib와 static lib, 라이브러리 의존성, OS 환경  대충 이렇게 적어봅니다.
  • 링커에 적은 “rust-lld”는 러스트 표준 라이브러리는 잘 빌드가 되겠지만 개발하면서 여러 lib를 추가할 경우 정상적으로 빌드 안될 수도 있으니 간단한 프로젝트에서나 사용하고 규모있는 프로젝트를 진행할 경우에는 cross 를 사용하거나 wsl이나 기타 VM을 이용해서 해당 환경을 꾸며놓고 그 안에서 빌드하는걸 추천하는 글을 여러개 봤음.

 

6. 참고했던 글들

https://doc.rust-lang.org/rustc/platform-support.html
https://kerkour.com/rust-cross-compilation
https://choiseokwon.tistory.com/338
https://velog.io/@soopsaram/Rust-Raspberry-PiARMv7용-크로스-컴파일-하기
https://happygrammer.github.io/rust/problem/cross-compile/
https://github.com/KodrAus/rust-cross-compile

기타 스택오버플로우 답글들 thx


Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다