2016-09-26 12 views
3

私はWindows 10を使用しています。armv7-unknown-linux-gnueabihfで実行するRustプログラムをクロスコンパイルしたいと思います。 (armv7-unknown-linux-musclも許容可能であるが、利用可能ではないようです。)ここでRustをWindowsからARM Linuxにクロスコンパイル

は私の手順は次のとおりです。

  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 ''のインターネット検索を実行すると、あらかじめビルドされたコンパイラをダウンロードしてリンカとして使用できる有望な方法があるようです。あなたはここに何を質問しようとしていますか?それが腐敗のための機能要求の場合、おそらくレポに1つを作る?セミ関連の側面についてのチャットがあります(https://github.com/rust-lang-nursery/rustup.rs/issues/486)。 – Shepmaster

+0

結果のほとんどはバイナリ形式(here)(https://launchpad.net/gcc-armembedded)で簡単に入手できる埋め込みベアメタルARM GCC用です。それは 'arm-none-eabi-gcc'(または何か;これらのターゲットのトリプルは非常に恣意的です)です。 – Timmmm

+1

一般的にパッケージ化されたクロスツールチェーンの場合、私は[Linaro toolchain binaries](http://www.linaro.org/downloads/)に行きます。もしそれが明確でない場合は、i686_mingw32が必要です。 – Notlikethat

答えて

2

ありがとう:

A)はい、あなたはあなた自身のGCCクロスコンパイラを提供する必要があります。

b)heremingw32ビルドを選択)を取得できます。

ただリナロのGCCは、それに貨物を指して解凍します。

[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" 

それはarm-ないarmv7-であっても動作するようです。私はリンクがISAに依存しないと思う。実際に私はまだそれを実行していないが、それはエラーなしで構築されます!

編集:

あなたは今、代わりにarmv7-unknown-linux-musleabihfを使用して(すなわち、それは多くの場合、互換性の問題の原因となるGNU Cライブラリに依存しない)、実際にポータブルバイナリを得ることができます。

+1

リンクはISAにある程度依存しますが、ほとんどは浮動小数点のものと一般的なアーキテクチャのプロファイル(つまりA対M)の点で異なります。とにかくデフォルトのターゲットとしてARMv7(特にCortex-A9)を使用して、ベアメタル以外のLinaroビルドを構成することもあります。 – Notlikethat

+0

ああ、便利です。ありがとう! – Timmmm

関連する問題