2016-09-26 3 views
3

Windows 10을 사용하고 있습니다. armv7-unknown-linux-gnueabihf에서 실행되는 Rust 프로그램을 크로스 컴파일하고 싶습니다. (armv7-unknown-linux-muscl도 허용 될 수 있지만, 가능하지 않는 것 같습니다.) 여기 Windows에서 ARM Linux로 Rust를 크로스 컴파일

내 단계는 다음과 같습니다

  1. 설치 rustup
  2. rustup toolchain install stable-x86_64-pc-windows-gnu
  3. rustup toolchain default stable-x86_64-pc-windows-gnu
  4. rustup target add armv7-unknown-linux-gnueabihf
  5. ./cargo/config 파일을 편집하여 포함 :

    ,
    [build] 
    target = "armv7-unknown-linux-gnueabihf" 
    
  6. cargo build

이 모든 것을 잘 컴파일하지만 그것을 연결에 올 때이 오류 제공 : 지금까지 내가 결정할 수 있었다으로

error: could not exec the linker `cc`: The system cannot find the file specified. (os error 2) 

을,이다 Rust는 자체 링커를 가지고 있지 않으며 대신 GCC를 사용하기 때문입니다. 분명히 나는이에게 자신을 제공하고 ./cargo/config 파일이 추가해야

[target.armv7-unknown-linux-gnueabihf] 
linker = "c:/path/to/my/gcc/cross/compiler" 

오른쪽인가요? 그렇다면 어스에서 어디서 그런 크로스 컴파일러를 다운로드 할 수 있습니까? 왜 rustup을 설치하지 않습니까? GCC의 크로스 컴파일 버전을 직접 컴파일해야하는 것은 C/C++ 프로그램을 크로스 컴파일 할 때 가장 큰 고통입니다. Rustup은 실제로 이것을 쉽게 만들어주지 않습니까? @의 Notlikethat 의견에

+0

'arm cross compiler windows '에 대한 인터넷 검색을 수행하면 미리 빌드 된 컴파일러를 다운로드하여 링커로 사용할 수있는 많은 유망한 리드가있는 것으로 보입니다. 어떤 질문을 하시겠습니까? 녹슬지 않기위한 기능 요청 인 경우 레포에서 하나만 만들 수 있습니까? 세미 관련 측면에 대한 대화가 있습니다 (https://github.com/rust-lang-nursery/rustup.rs/issues/486). – Shepmaster

+0

대부분의 결과는 바이너리 형태 [여기] (https://launchpad.net/gcc-arm-embedded)에서 쉽게 사용할 수있는 임베디드 베어 메탈 ARM GCC에 대한 것입니다.그것은'arm-none-eabi-gcc' (또는 무언가,이 목표 삼중 체는 매우 임의적입니다)입니다. – Timmmm

+1

일반적으로 패키지화 된 교차 툴체인의 경우 [Linaro toolchain binaries] (http://www.linaro.org/downloads/)로 이동하십시오. 분명하지 않은 경우 i686_mingw32가 필요합니다. – Notlikethat

답변

2

감사합니다 :

A) 네, 당신은 당신의 자신의 GCC 크로스 컴파일러를 제공해야합니다.

b) here (mingw32 빌드 선택)을 얻을 수 있습니다.

그냥 리나의 GCC는 다음에화물을 가리 킵니다 압축을 풉니 다 : arm-하지 armv7- 비록에서도 작동하는 것 같다

[target.armv7-unknown-linux-gnueabihf] 
linker = "C:/Users/me/gcc-linaro-5.3.1-2016.05-i686-mingw32_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc.exe" 

. 나는 연결을 ISA에 의존하지 않는다고 생각한다. 사실 나는 아직 그것을 실행하지 못했지만 오류없이 빌드됩니다!

편집 :

이제 대신 armv7-unknown-linux-musleabihf를 사용하고 (즉, 종종 호환성 문제를 일으키는 원인이되는 GNU C 라이브러리에 의존하지 않는다)를 실제로 휴대용 바이너리를 얻을 수 있습니다.

+1

링크는 ISA에 어느 정도 영향을 미치지 만, 주로 부동 소수점 항목과 일반 아키텍처 프로필 (즉, A와 M) 측면에서 다릅니다. 어쨌든 비 - 베어 메탈 Linaro 빌드는 기본 대상으로 ARMv7 (특히 Cortex-A9)을 사용하여 구성됩니다. – Notlikethat

+0

아, 편리합니다. 감사! – Timmmm