You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust模块导入报错:文件存在却提示找不到

Rust模块导入问题解析

问题根源:对mod关键字的误解

你在structure.rs里写mod fn_lib;时,Rust会认为你要在structure模块下创建一个名为fn_lib的子模块,因此会去查找src/structure/fn_lib.rs文件,这就是编译器提示你创建该文件的原因。

main.rs作为crate根模块,里面的mod fn_lib;是将fn_lib.rs声明为crate的直接子模块(即crate::fn_lib),所以能正常找到同级文件。当你通过main.rs里的mod structure;将structure.rs声明为crate的子模块后,structure就成为main的子模块(层级为crate::structure),此时structure内部的mod声明只会查找自己的子模块路径,而非和main同级的文件。

正确解决方法

要在structure.rs中使用fn_lib的内容,不需要再写mod fn_lib;,直接通过以下方式导入即可:

方法1:绝对路径(推荐)

直接引用crate根下的fn_lib模块:

// structure.rs
use crate::fn_lib::*;

方法2:相对路径

利用super指代上级模块(即main)来引用:

// structure.rs
use super::fn_lib::*;

移除main.rs中structure导入后能编译的原因

当你删掉main.rs里的mod structure;,structure.rs就不再属于当前crate——此时如果单独编译structure.rs(比如作为独立库文件),它会成为新的crate根,里面的mod fn_lib;会查找同级的fn_lib.rs,因此能正常编译。但这种情况下structure和main属于两个独立crate,自然无法被main.rs访问。

内容的提问来源于stack exchange,提问作者user23089382

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 10:10:07