无法使用dune编译使用sqlite3模块的OCaml程序

wvt8vs2t  于 2023-06-23  发布在  SQLite
关注(0)|答案(1)|浏览(127)

我想在OCaml中测试Sqlite3绑定。
我已经下载了opam相应的软件包,使用utop可以正常工作。我这样测试了一下:

#use "topfind";;
#require "sqlite3";;
#show Sqlite3;;
open Sqlite3
let db = db_open "yolo";;
let _ = db_close db;;

问题是我不能在用dune编译的程序中使用相同的模块。下面是我尝试编译的代码:(main.ml文件的内容)

let _ = Sqlite3.sqlite_version ();;

dune文件的内容)

(executable
    (name main)
    (libraries sqlite3)
)

当我尝试使用dune build编译它时,我得到了Unbound value Sqlite3.sqlite_version。其他软件包不会发生这种情况(选中yojson,它按预期工作)。
编辑:值得注意的是,打开Sqlite3(即open Sqlie3)模块在.ml文件中工作。它仅仅使用内部的任何函数都会导致错误。

v9tzhpje

v9tzhpje1#

解决办法很简单。
不要将项目命名为与要在项目中使用的库相同的名称。
我使用dune init proj sqlite3创建了一个名为“sqlite3”的项目,因此它自动生成了一个名为“sqlite3”的库的样板。
以任何其他方式命名它解决了问题。

相关问题