Rust二进制文件无法引用lib.rs内部模块的问题求助
问题原因与解决方案
问题原因
- 每个通过
[[bin]]声明的二进制文件是独立的Rust crate,与lib.rs作为根的lib crate上下文完全分离。 - 二进制crate默认不会自动关联同package下的lib crate:
- 用
use mytestapp::xxx时,编译器找不到mytestapp这个依赖crate; - 用
use crate::xxx时,crate指向当前二进制crate的根(即file1.rs),自然不存在standalone_tools模块。
- 用
解决方案(无需重构目录)
方案1:显式引入lib crate(推荐)
在每个二进制文件开头添加extern crate声明,明确引入同package的lib crate:
// src/standalone_tools/file1.rs extern crate mytestapp; use mytestapp::standalone_tools::mod1; use mytestapp::standalone_tools::mod2; use mytestapp::standalone_tools::mod3; fn main() { // 业务逻辑 }
Rust 2018后虽无需常规extern crate,但此处显式声明可确保编译器正确识别lib crate。
方案2:将lib crate添加为自身依赖
在Cargo.toml的[dependencies]块中添加对自身lib的引用:
[dependencies] sha2 = "0.10" mytestapp = { path = ".", version = "0.1.0" }
此方式下所有二进制文件可直接使用use mytestapp::xxx,无需额外添加extern crate。
额外检查
确保src/standalone_tools/mod.rs(对应lib.rs中的pub mod standalone_tools;)正确声明子模块:
// src/standalone_tools/mod.rs pub mod mod1; pub mod mod2; pub mod mod3;
同时确认src/standalone_tools/mod1.rs、mod2.rs、mod3.rs存在且内容合法。
完成上述调整后,执行cargo build --features "mainnet"即可正常编译所有二进制文件。
内容的提问来源于stack exchange,提问作者Bruce
相关产品推荐
相关产品推荐

