OCaml使用Dune编译引用本地库出现Unbound module错误如何修复
问题修复方案
核心原因
Dune 对自定义库默认开启模块自动包装,你在 lib 目录定义的库名为 mcts,库内所有模块默认都会被封装到顶层 Mcts 模块下,直接调用 Readertsp 会识别不到模块。
修复步骤
- 方案一:调整模块引用路径
直接修改你的可执行入口代码(报错对应的MCTS_main.ml),加上库名前缀:let city_config = "ch130" in let path = Mcts.Readertsp.open_path city_config in ();; - 方案二:关闭库的模块包装
如果你希望直接使用Readertsp作为模块名调用,修改lib/dune配置,添加wrapped false字段:(library (name mcts) (modules Readertsp) (libraries graphics) (wrapped false) ) - 额外校验点
- 你的
bin/dune中配置了(name MCTS_main),要求对应的入口源文件必须命名为MCTS_main.ml,如果当前入口文件是bin.ml,要么重命名源文件,要么把name字段改为(name bin)。 - 报错提示出错文件是
tests/MCTS_main.ml,如果该文件存放在独立的tests目录下,需要给tests目录也添加dune配置,并且在依赖的libraries中引入mcts库。
- 你的
内容的提问来源于stack exchange,提问作者Butanium
相关产品推荐
相关产品推荐

