Rust 크로스 컴파일을 윈도우에서 하는 방법을 찾아보고 여기에 정리합니다. 타깃은 x86 리눅스입니다.
1. toolchain 추가
rustup target list
위 명령으로 지원하는 toolchain 목록을 볼 수 있습니다. 러스트 공식문서에서도 확인 가능합니다.
rustup target add x86_64-unknown-linux-musl
2. 샘플 프로젝트 생성
cargo new 명령으로 간단하게 샘플 파일을 만듭니다.
fn main() { println!("Hello, world!"); }
main.rs 파일의 내용은 위와 같습니다.
3. 링커 추가 & 빌드
툴체인을 추가하고 빌드를 하면 linker cc를 찾을수 없다는 에러가 납니다.
%HOMEPATH%/.cargo/
위 경로 폴더에 있는 config 파일에 cc에 관한 설정을 추가해야 합니다. 파일이 없으면 새로 생성합니다.
[target.x86_64-unknown-linux-musl] linker = "rust-lld"
cargo build --target=x86_64-unknown-linux-musl
다시 빌드 하면 잘 됨.
4. 실행
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
답글 남기기