Rust项目main.rs引用lib.rs模块报错:unresolved import `wasm_jd`
解决Rust中main.rs与lib.rs共存时模块引用失败的问题
当你的Rust项目同时包含src/lib.rs(库crate)和src/main.rs(二进制crate)时,Cargo会将它们视为两个独立的crate,二进制crate不会自动关联同项目的库crate,这就是你遇到unresolved import错误的原因。
解决方案:显式声明二进制crate对库crate的依赖
修改你的Cargo.toml,添加二进制crate的配置并引入库依赖:
[package] name = "wasm_jd" version = "0.1.0" edition = "2021" # 声明二进制crate [[bin]] name = "wasm_jd" path = "src/main.rs" # 引入同项目的库crate作为依赖 [dependencies] wasm_jd = { path = ".", version = "0.1.0" }
原理说明
[[bin]]块明确告诉Cargo当前项目包含一个二进制目标,指定了目标名称和对应的源码路径。dependencies中的wasm_jd依赖通过path="."指向当前项目的库crate,确保二进制crate能正确找到并导入库中的公共函数。
替代方案(适合小型项目)
如果不想分开管理两个crate,也可以直接在main.rs中把lib.rs作为子模块导入:
// src/main.rs mod lib; use serde_json::json; use serde_json::Value; use lib::preview; fn main() { let j: Value = json!({"a": 1}); let tmp: Value = preview(Vec::new(), j); let d = tmp.to_string(); println!("{}", d) }
这种方式无需修改Cargo.toml,但会将lib.rs作为二进制crate的子模块而非独立库,适合简单场景。
内容的提问来源于stack exchange,提问作者Simon H
相关产品推荐
相关产品推荐

