cargo_toml与embuild版本不匹配的问题解决方案咨询
解决Cargo版本依赖冲突问题
问题现象
执行cargo build时触发版本依赖错误,具体报错如下:
Running `cargo build --bin=thingspeak-example --package=thingspeak-example --message-format=json --color=always`... Updating crates.io index error: failed to select a version for the requirement `cargo_toml = "^0.12"` candidate versions found which didn't match: 0.20.5, 0.20.4, 0.20.3, ... location searched: crates.io index required by package `embuild v0.30.4` ... which satisfies dependency `embuild = "^0.30.4"` of package `esp-idf-sys v0.31.10` ... which satisfies dependency `esp-idf-sys = "=0.31.10"` of package `thingspeak-example v0.1.0 (/home/jteiland/thingspeak-example)` if you are looking for the prerelease package it needs to be specified explicitly cargo_toml = { version = "0.19.0-beta.1" } Error: Cargo invocation failed. at t.Cargo.getCargoArtifacts (/home/jteiland/.vscode-server/extensions/vadimcn.vscode-lldb-1.11.1/extension.js:1:10993) at process.processTicksAndRejections (node:internal/process/task_queues:95:5) at async Object.open (/home/jteiland/.vscode-server/extensions/vadimcn.vscode-lldb-1.11.1/extension.js:1:9296) Caused by: Error: exit code: 101. at ChildProcess.<anonymous> (/home/jteiland/.vscode-server/extensions/vadimcn.vscode-lldb-1.11.1/extension.js:1:12660) at ChildProcess.emit (node:events:519:28) at maybeClose (node:internal/child_process:1105:16) at ChildProcess._handle.onexit (node:internal/child_process:305:5)
当前使用的Cargo.toml内容如下:
[package] name = "thingspeak-example" version = "0.1.0" authors = ["Sergio Gasquez <sergio.gasquez@gmail.com>"] edition = "2021" resolver = "2" [profile.release] opt-level = "s" [profile.dev] debug = true # Symbols are nice and they don't increase the size on Flash opt-level = "z" [features] pio = ["esp-idf-sys/pio"] [dependencies] esp-idf-hal = "=0.38" esp-idf-sys = { version = "=0.31.10", features = ["binstart"] } esp-idf-svc = { version = "=0.42.5", features = ["experimental", "alloc"] } embedded-svc = "=0.22" anyhow = "1.0" toml-cfg = "0.1" log = "0.4.17" # serde_json = "1.0.85" serde = "1.0.144" shared-bus = "0.2.4" shtcx = "0.10.0" cargo_toml = { version = "0.19.0-beta.1" } [build-dependencies] embuild = "0.30" anyhow = "1"
问题原因
报错核心是依赖版本冲突:esp-idf-sys v0.31.10依赖的embuild v0.30.4要求cargo_toml ^0.12,但你显式指定了cargo_toml 0.19.0-beta.1,两个版本范围没有交集,导致Cargo无法解析出兼容版本。
解决方案
方案1:降低cargo_toml版本(推荐,无需改动ESP生态依赖)
将Cargo.toml中[dependencies]下的cargo_toml条目改为0.12.x系列的稳定版本,比如最新的0.12.1:
cargo_toml = "0.12.1"
修改后执行cargo build即可解决冲突。
方案2:升级embuild及ESP生态依赖
如果需要保留cargo_toml 0.19.0-beta.1,则需要升级embuild到支持该版本的版本(需查看embuild版本日志确认兼容版本),同时同步升级esp-idf-sys、esp-idf-hal、esp-idf-svc等依赖到匹配版本,确保整个ESP生态链版本兼容。例如:
# 修改build-dependencies embuild = "0.31" # 同步升级ESP相关依赖到兼容版本(示例版本需根据实际兼容情况调整) esp-idf-sys = { version = "=0.32.0", features = ["binstart"] } esp-idf-hal = "=0.39" esp-idf-svc = { version = "=0.43.0", features = ["experimental", "alloc"] }
内容的提问来源于stack exchange,提问作者Jutta Eilander
相关产品推荐
相关产品推荐

