作業環境
Windows 10(WSL2 Ubuntu 18.04-2)
バージョン
cargo 1.53.0-nightly (3c44c3c4b 2021-03-31) release: 1.53.0 commit-hash: 3c44c3c4b7900b8b13c85ead25ccaa8abb7d8989 commit-date: 2021-03-31
rustc 1.53.0-nightly (d474075a8 2021-04-01) binary: rustc commit-hash: d474075a8f28ae9a410e95d849d009006db4b176 commit-date: 2021-04-01 host: x86_64-unknown-linux-gnu release: 1.53.0-nightly LLVM version: 12.0.0
発生している事象
以下のような内容のlibクレートを下記カスタムターゲットでビルドしました。
クレート生成時のコマンド:cargo new --lib test
lib.rs
rust
1#![feature(restricted_std)] 2// 以下実装なし
ファイル名:x86_64-unknown-none.json
json
1{ 2 "llvm-target": "x86_64-unknown-none", 3 "data-layout": "e-m:e-i64:64-f80:128-n8:16:32:64-S128", 4 "arch": "x86_64", 5 "target-endian": "little", 6 "target-pointer-width": "64", 7 "target-c-int-width": "32", 8 "os": "none", 9 "executables": true, 10 "linker-flavor": "ld.lld", 11 "linker": "rust-lld", 12 "panic-strategy": "abort", 13 "disable-redzone": true, 14 "features": "-mmx,-sse,+soft-float" 15}
build-stdが指定されるように.cargo/config
を以下のとおり設定しています。
toml
1[target.x86_64-unknown-none] 2rustflags = [ 3 # Build Options 4 "-C", "relocation-model=static", 5] 6 7[build] 8target = "x86_64-unknown-none.json" 9 10[unstable] 11build-std = ["core", "compiler_builtins", "alloc"]
ビルドコマンドとエラーは以下のとおりです。
/mnt/d/Users/user/Documents/vmShare/testCodes/bare/common$ cargo build Compiling compiler_builtins v0.1.39 Compiling core v0.0.0 (/home/user/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/core) Compiling rustc-std-workspace-core v1.99.0 (/home/user/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/rustc-std-workspace-core) Compiling alloc v0.0.0 (/home/user/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/alloc) Compiling common v0.1.0 (/mnt/d/Users/user/Documents/vmShare/testCodes/bare/common) error[E0463]: can't find crate for `std` | = note: the `x86_64-unknown-none-17747633082801976854` target may not be installed error: aborting due to previous error For more information about this error, try `rustc --explain E0463`. error: could not compile `common` To learn more, run the command again with --verbose. warning: build failed, waiting for other jobs to finish... error: build failed
ただし、-Zbuild-std
オプションを付けるとビルドが通ります。
疑問
- -Zbuild-stdは
.cargo/config
または.cargo/config.toml
で置き換えられないのか(バイナリクレートではどちらの方法でも正しくビルドできた) - なぜ、-Zbuild-stdを付けた途端にビルドが正しく走るのか(.cargo/configが正しく置き換えられていれば、こちらも通らないはず)
Rustの仕様が良く理解できていないので、上記2点質問させてください。
以上です。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。