当前位置:   article > 正文

Rust 交叉编译_no package filosottile/musl-cross/musl-cross avail

no package filosottile/musl-cross/musl-cross available.

安装链接器

根据你的目标平台自己装一个就好。

1.1 Mac: 通过 brew 安装 musl-cross 工具 来专门编译到 linux 的工具链。

$ brew install FiloSottile/musl-cross/musl-cross  
$ brew install mingw-w64 
  • 1
  • 2

1.2 Windows:通过安装 mingw-w64 来专门编译到 linux 的工具链。

rustup target add x86_64-unknown-linux-musl
  • 1

2.我装的是 musl-cross,装好后到 ~/.cargo/config 文件中添加上:

[target.x86_64-unknown-linux-musl]
linker = "x86_64-linux-musl-gcc"
  • 1
  • 2

常见问题
要是提示/bin/sh: musl-gcc: command not found,解决方法是安装musl-cross

brew install filosottile/musl-cross/musl-cross
  • 1

rustup 配置

rustup 是 Rust 的包管理工具,用它来配置工具链可以很省心。
运行 rustup target list 你可以看到很多的目标平台。

$ rustup target list
aarch64-apple-ios
aarch64-linux-android
aarch64-unknown-fuchsia
aarch64-unknown-linux-gnu
aarch64-unknown-linux-musl
arm-linux-androideabi
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf
arm-unknown-linux-musleabi
arm-unknown-linux-musleabihf
armv5te-unknown-linux-gnueabi
armv5te-unknown-linux-musleabi
armv7-apple-ios
armv7-linux-androideabi
armv7-unknown-linux-gnueabihf
armv7-unknown-linux-musleabihf
armv7s-apple-ios
asmjs-unknown-emscripten
i386-apple-ios
... ...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

我们之前只设置了 target.x86_64-unknown-linux-musl,所以现在也只装对应的这个目标平台相关工具:

$ rustup target add x86_64-unknown-linux-musl
  • 1

这一步如果很慢可以在你的 .bashrc 或者 .zshrc 中添加这一行,中科大的源加速很靠谱:

export RUSTUP_DIST_SERVER=https://mirrors.ustc.edu.cn/rust-static
  • 1

编译

接着只要在运行 build 命令时指定 target 就可以了。

$ cargo build --target=x86_64-unknown-linux-musl
  • 1

接着你可以看到类似这样的文件结构:

├── build
└── target
    └── x86_64-unknown-linux-musl
        └── debug
            ├── build
            ├── deps
            ├── examples
            ├── incremental
            └── native
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

找到你对应编译好的可执行文件,扔到你的 linux 机子上跑,就可以了。
你可以用 file 命令确认一下:

$ file target/x86_64-unknown-linux-musl/debug/rust-test
target/x86_64-unknown-linux-musl/debug/rust-test: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, with debug_info, not stripped
  • 1
  • 2

1.遇到的问题

1在编译Rust源程序时,可能会出现如下 Couldn’t resolve host name (Could not resolve host: crates) 错误(见 https://github.com/ustclug/discussions/issues/294)。

一个临时的解决方法是在运行 cargo 的时候加入环境变量

CARGO_HTTP_MULTIPLEXING=false

。作用是取消并行下载。具体原因可参考用了镜像之后构建rustc报错。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/533404
推荐阅读
相关标签
  

闽ICP备14008679号