Rust项目模块可见性问题:跨模块引用amd64::fp64失败
解决Rust模块引用找不到
amd64的问题 我来帮你搞定这个模块引用的坑~ 问题的核心是Rust的模块路径解析规则——你直接在src/fp.rs里写amd64::fp64::*,Rust会默认在fp模块的子目录里找amd64,而不是你src根目录下的那个amd64模块,所以才会报找不到的错误。
具体解决方案分两步:
1. 在 crate 根模块中声明子模块
首先,你的项目需要一个根模块文件:如果是库项目,就是src/lib.rs;如果是二进制项目,就是src/main.rs。你需要在这个根文件里显式声明amd64和fp这两个子模块,这样Rust才会把它们纳入整个crate的模块树中。
比如在src/lib.rs里添加:
// 声明amd64模块(会自动读取src/amd64/mod.rs) pub mod amd64; // 声明fp模块(会自动读取src/fp.rs) pub mod fp;
2. 修改src/fp.rs中的引用路径
现在你需要用绝对路径(从crate根开始)来引用amd64模块,修改src/fp.rs的代码:
// 从crate根导入amd64::fp64下的所有内容并导出 pub use crate::amd64::fp64::*; // 同样用绝对路径定义Element类型别名 pub type Element = crate::amd64::fp64::Element;
为什么之前的写法会出错?
- 直接写
amd64::fp64::*时,Rust的路径解析是相对当前模块的,它会去src/fp/amd64目录找模块,而你的amd64是在src根目录,自然找不到。 - 仅用
use amd64::fp64::*同样是路径错误,导致Element没有被正确导入到fp模块中,其他文件引用时自然会提示找不到。
验证修改后的项目结构
修改完成后,你的项目结构应该是这样的:
src/ ├── lib.rs ├── amd64/ │ ├── mod.rs // 内容:pub mod fp64; │ └── fp64.rs // 内容:pub struct Element(pub (crate) [u64; 12]); └── fp.rs // 用crate::amd64::fp64引用模块
之后,其他文件如果要使用Element类型,就可以通过crate::fp::Element或者use crate::fp::Element;来正常引用了。
内容的提问来源于stack exchange,提问作者tinker
相关产品推荐
相关产品推荐

