Cargo无法找到已在Toml声明且实际存在的thread_pool crate
问题
我有一个大型Rust项目,其Cargo.toml配置如下:
[package] name = "semperengine" version = "0.1.0" edition = "2021" [lib] name = "semperengine" path = "src/lib.rs" [dependencies] rand_pcg = "0.3.1" rand = "0.8.5" image = "0.24.3" cfg-if = "1.0.0" # internal algebra = { path = "crates/algebra" } builder = { path = "crates/builder" } camera = { path = "crates/camera" } chicken_wire = { path = "crates/chicken_wire" } dual_contouring = { path = "crates/dual_contouring/" } geometry = { path = "crates/geometry" } hedge = { path = "crates/hedge" } iterators = { path = "crates/iterators" } ne_core = { path = "crates/ne_core" } ne_gui = { path = "crates/ne_gui" } noise = { path = "crates/noise" } numerical_analysis = { path = "crates/numerical_analysis" } peripherals = { path = "crates/peripherals" } pga = { path = "crates/pga" } topology = { path = "crates/topology" } thread_pool = { path = "crates/thread_pool" } vulkan_bindings = { path = "crates/vulkan_bindings" }
运行cargo build时出现如下错误:
error: no matching package named `thread_pool` found location searched: /home/makogan/rust_never_engine/crates/thread_pool required by package `semperengine v0.1.0 (/home/makogan/rust_never_engine)`
但thread_pool crate确实存在,执行ls命令可见目录内容:
ls /home/makogan/rust_never_engine/crates/thread_pool/ benches Cargo.lock Cargo.toml flamegraph.svg out.txt perf.data perf.data.old src target
为何Cargo能找到其他内部crate,却无法找到这个特定的thread_pool?
可能的原因及解决方法
- 子crate名称不匹配:检查
crates/thread_pool/Cargo.toml中[package]下的name字段是否为thread_pool。Cargo依赖声明的名称必须和子crate的name完全一致,区分大小写的系统中大小写差异也会导致识别失败。 - 路径大小写问题:Linux/macOS等系统区分文件名大小写,确认主项目
Cargo.toml里的路径crates/thread_pool和实际目录的大小写完全一致。 - 子crate配置文件语法错误:打开
crates/thread_pool/Cargo.toml检查是否存在语法错误,比如缺失括号、逗号,或者字段格式错误,这类问题会导致Cargo无法解析该crate。 - 缓存异常:执行
cargo clean清理Cargo缓存后,重新运行cargo build,缓存问题可能导致异常的依赖识别失败。 - 缺少入口文件:确认
crates/thread_pool/src目录下存在lib.rs(库crate)或main.rs(二进制crate),没有入口文件的话Cargo无法识别该目录为有效crate。
内容的提问来源于stack exchange,提问作者Makogan
相关产品推荐
相关产品推荐

