我想在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文件中工作。它仅仅使用内部的任何函数都会导致错误。
1条答案
按热度按时间v9tzhpje1#
解决办法很简单。
不要将项目命名为与要在项目中使用的库相同的名称。
我使用
dune init proj sqlite3
创建了一个名为“sqlite3”的项目,因此它自动生成了一个名为“sqlite3”的库的样板。以任何其他方式命名它解决了问题。