課題:以前ビルドできていたプロジェクトのビルドできない状況になった。
結果:build.rsを加えたらエラー解消
詳細:
ビルドエラーメッセージは以下(長いので抜粋)
Compiling tsp_xiao_try v0.1.0 (/home/<usr_id>/lang/rust/tsp_xiao_try) error: linking with `ldproxy` failed: exit status: 101 | = note: LC_ALL="C" PATH="/home/xxx/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/bin:/home/xxx.rustup/toolchains/esp/riscv32-esp-elf/esp-2021r2-patch5-8_4_0/riscv32-esp-elf/bin:/home/sxxx.rustup/toolchains/esp/xtensa-esp32-elf/esp-2021r2-patch5-8_4_0/xtensa-esp32-elf/bin:/home/xxx.rustup/toolchains/esp/xtensa-esp32s3-elf/esp-2021r2-pat *略* = note: [ldproxy] Running ldproxy thread 'main' panicked at 'Cannot locate argument '--ldproxy-linker <linker>'', /home/xxxx/.cargo/registry/src/index.crates.io-6f17d22bba15001f/ldproxy-0.3.3/src/main.rs:44:13 stack backtrace:
リンカでエラーが発生してるようだ。
Cannot locate argument '--ldproxy-linker <linker>
ldproxy-linkerの引数が渡されていないから??
どうやったら解消できるのか分からず。。。
エラーメッセージでぐぐると、同じエラーの記載あり
Build failures · esp-rs/rust-build Wiki · GitHub
上記サイトによると、build.rsが無いのが原因であると。。
reason: missing build.rs
場当たり的だが、テンプレートプロジェクトから、build.rsをコピー(以前は無しで動いていたはずだが、、しかもこの内容でいいのか不明)
// Necessary because of this issue: https://github.com/rust-lang/cargo/issues/9641 fn main() -> Result<(), Box<dyn std::error::Error>> { embuild::build::CfgArgs::output_propagated("ESP_IDF")?; embuild::build::LinkArgs::output_propagated("ESP_IDF")?; Ok(()) }
結果、ビルドは通った。build.rsってそんなに重要なのか。このファイルがリンカ―とどう関係しているのかも読み取れず。。
■追記
別のプロジェクトもビルドNGに陥り、エラーが解消できずずっと悩んでいた。重要視していなかった、ビルドをコントロールするファイル類をきっちり書かないと安定してビルドできないことが分かった(分かっている人には当たり前なのかもしれませんが)
file: ust-toolchain.toml
[toolchain] channel = "nightly" components = ["rust-src"]
file: build.rs
// Necessary because of this issue: https://github.com/rust-lang/cargo/issues/9641 fn main() -> Result<(), Box<dyn std::error::Error>> { embuild::build::CfgArgs::output_propagated("ESP_IDF")?; embuild::build::LinkArgs::output_propagated("ESP_IDF")?; Ok(()) }
file: .cargo/config.toml
[build] target = "riscv32imc-esp-espidf" [target.riscv32imc-esp-espidf] linker = "ldproxy" runner = "espflash flash --monitor" # Select this runner for espflash v2.x.x rustflags = ["-C", "default-linker-libraries"] [unstable] build-std = ["std", "panic_abort"] [env] ESP_IDF_VERSION = "release/v4.4"
この状態で、rustupでtoolchainを確認すると以下
$ rustup show Default host: x86_64-unknown-linux-gnu rustup home: /home/sumi/.rustup installed toolchains -------------------- stable-x86_64-unknown-linux-gnu nightly-2023-02-28-x86_64-unknown-linux-gnu nightly-x86_64-unknown-linux-gnu (default) esp installed targets for active toolchain -------------------------------------- riscv32imac-unknown-none-elf riscv32imc-unknown-none-elf x86_64-unknown-linux-gnu active toolchain ---------------- nightly-x86_64-unknown-linux-gnu (overridden by '/home/xxxx/lang/rust/tsp_xiao_ok/rust-toolchain.toml') rustc 1.71.0-nightly (521f4dae1 2023-05-19)