首页 文章

从Windows到ARM Linux交叉编译Rust

提问于
浏览
4

我正在使用Windows 10.我想交叉编译一个Rust程序以在 armv7-unknown-linux-gnueabihf 上运行 . ( armv7-unknown-linux-muscl 也可以接受,但似乎没有 . )

这是我的步骤:

  • 安装 rustup

  • rustup toolchain install stable-x86_64-pc-windows-gnu

  • rustup toolchain default stable-x86_64-pc-windows-gnu

  • rustup target add armv7-unknown-linux-gnueabihf

  • 编辑我的 ./cargo/config 文件以包含:

[build]
target = "armv7-unknown-linux-gnueabihf"
  • 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"

是对的吗?如果是这样,我可以在地球上下载这样的Windows交叉编译器,为什么不安装它?必须自己编译GCC的交叉编译版本是交叉编译C / C程序的最大痛苦 . Rustup真的不会让这更容易吗?

1 回答

  • 3

    感谢@ Notlikethat的评论:

    a)是的,您需要提供自己的GCC交叉编译器 .

    b)你可以得到一个here(选择一个 mingw32 版本) .

    只需解压linaro的海湾合作委员会然后将货物指向它:

    [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- . 我想链接还没有运行它,但它构建没有错误!

    Edit:

    您现在可以使用 armv7-unknown-linux-musleabihf 来获取实际的可移植二进制文件(即它不依赖于GNU C库,这通常会导致兼容性问题) .

相关问题