无法覆盖 Rustup 工具链以为 iOS 工具链进行自定义构建

3

我正在使用我的Rust版本创建自己的工具链,需要用它来进行iOS架构的交叉编译。在尝试设置默认工具链或覆盖当前目录的工具链时,出现了关于我的工具链名称的错误。这是我创建新工具链的步骤:

  1. Create Rustup Toolchain

    rustup toolchain link ios $HOME/rustc-ios
    
  2. Override current directory toolchain

    rustup override set ios
    
$ rustup show
Default host: x86_64-apple-darwin
error: toolchain 'ios' does not support components
info: caused by: invalid toolchain name: 'ios'

我尝试了符合工具链命名规范的其他名称,但都没有成功:

$ rustup toolchain link stable-2016-07-19-x86_64-apple-ios $HOME/rustc-ios
error: invalid custom toolchain name: 'stable-2016-07-19-x86_64-apple-ios'

$ rustup toolchain link stable-x86_64-apple-ios $HOME/rustc-ios
error: invalid custom toolchain name: 'stable-x86_64-apple-ios'

$ rustup toolchain link x86_64-apple-ios $HOME/rustc-ios

[更新]

关于第二种方法,当我进行cargo build时,我仍然看到编译器将Arm库链接到我为rustup工具链安装的目标中(即我在/Users/test-user/src/test-rust-lib/target/中为#1安装的目标):

rustc src/lib.rs 
--crate-name test-rust-crate
--crate-type staticlib 
-g 
--cfg 
feature=\"no_network\" 
--out-dir /Users/test-user/src/test-rust-lib/target/armv7-apple-ios/debug 
--emit=dep-info,link 
--target armv7-apple-ios 
-L dependency=/Users/test-user/src/test-rust-lib/target/armv7-apple-ios/debug 
-L dependency=/Users/test-user/src/test-rust-lib/target/armv7-apple-ios/debug/deps 
--extern serde_json=/Users/test-user/src/test-rust-lib/target/armv7-apple-ios/debug/deps/libserde_json-55921106e25a0359.rlib 
--extern serde=/Users/test-user/src/test-rust-lib/target/armv7-apple-ios/debug/deps/libserde-e281201342afb4d4.rlib 
--extern time=/Users/test-user/src/test-rust-lib/target/armv7-apple-ios/debug/deps/libtime-750bfdd52feafcb7.rlib 
--extern libc=/Users/test-user/src/test-rust-lib/target/armv7-apple-ios/debug/deps/liblibc-1f3392fe1afd1313.rlib 
--extern murmur3=/Users/test-user/src/test-rust-lib/target/armv7-apple-ios/debug/deps/libmurmur3-ab9a44fb20fb9fad.rlib 
--extern quick_error=/Users/test-user/src/test-rust-lib/target/armv7-apple-ios/debug/deps/libquick_error-729eced693f2612d.rlib 
--extern url=/Users/test-user/src/test-rust-lib/target/armv7-apple-ios/debug/deps/liburl-4690728b1e11fab3.rlib

Arm 库不应该从我构建的 rustc 中提取吗?

我认为这个问题可以关闭了,因为 rustup show 的 bug 已经被修复了,而且其他的问题似乎无法在当前的 rustup/rustc/cargo 环境下重现。 - oli_obk
1个回答

2
我怀疑你在rustup show中看到的行为是与该特定命令相关的rustup bug。我已经提交了一个问题来调查它。
当你使用rustup linkrustup override配置自定义工具链后,尝试进行构建时会发生什么?

嘿@brson,我在上面发布了一些来自cargo build的输出。我并不完全相信rustup工具链被选中了,因为我仍然看到Arm库从我从rustup add target安装的库中加载。Arm库应该从我自己构建的rustc中获取,对吧? - ayl
在你粘贴的输出片段中,有一堆 --extern 标志,cargo 会将它们传递给 rustc,告诉它在某个特定的位置查找 crates,但这些 crates 是 cargo 自己构建的。这个输出并没有说任何关于编译器自带的 crates(即标准库)的位置。 - brson
以下是两种检查 rustc 是否从自定义工具链加载标准库的方法:首先只需运行 rustc --sysroot。这将输出“sysroot”的路径,该目录包含 std。其次,您可以设置环境变量 RUST_LOG=rustc_metadata::creader。rustc 应该会喷出一堆板条箱加载诊断信息。开始的部分“resolved crates”应显示每个板条箱的路径,包括 sysroot 中的板条箱。 - brson
$ rustc --sysroot 错误:缺少选项“sysroot”的参数。 - ayl
当我设置RUST_LOG环境变量时,我看不到“已解决的crate”。 - ayl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接